左耳聽風打卡.ARTS (第1周)

王鯨弋發表於2019-03-17

{success} 每週完成一個 ARTS: 至少做一個 leetcode 的演算法題、閱讀並點評至少一篇英文技術文章、學習至少一個技術技巧、分享一篇有觀點和思考的技術文章。(也就是 Algorithm、Review、Tips、Share 簡稱 ARTS)

Algorithm

{success} 每週至少做一個 leetcode 的演算法題(先從 Easy 開始,然後再 Medium,最後才 Hard)。如果不訓練看再多的演算法書,依然然不會做演算法題,看完書後需要訓練。關於做Leetcode的的優勢,你可以看一下 coolshell 上的文章 LEETCODE 程式設計訓練

LeetCode 1. 兩數之和 解題語言 PHP

題:

給定一個整數陣列 `nums` 和一個目標值 `target`,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。

你可以假設每種輸入只會對應一個答案。但是,你不能重複利用這個陣列中同樣的元素。

示例:

給定 nums = [2, 7, 11, 15], target = 9

因為 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

解:

class Solution {
     function twoSum($nums, $target) {
        for($i=0; $i<count($nums); $i++){
            $subKey = array_search($target-$nums[$i], $nums);
            if($subKey == $i){
                $numsCopy = $nums;
                unset($numsCopy[$subKey]);
                $subKey = array_search($diff, $numsCopy) ?? false;
            }
            if ($subKey !== false) {
                return [$i, $subKey];
            }
        }
    }
}

排名

  • 執行用時 : 204 ms, 在 Two Sum 的 PHP 提交中擊敗了 67.16% 的使用者
  • 記憶體消耗 : 15.7 MB, 在 Two Sum 的 PHP 提交中擊敗了 100.00% 的使用者

Review

{success} 主要為了學習英文,如果英文不行,基本上無緣技術高手。

本週閱讀的是 71 | 程式設計師練級攻略:正式入門 中提及的這篇關於如何有效地快速提高自己程式設計能力的文章(The Key To Accelerating Your Coding Skills)。前兩段閱讀英文原文,但限於我只有 2000 的詞彙量 所以讀起來很費勁。索性就在 sougou 上找中文翻譯了,這篇文章的重點可以概括為以下幾點:

  1. 要可以鍛鍊我們獨立解決問題的能力。
  2. 最好用谷歌搜尋你在 Coding 中遇到的問題。
  3. 最好透過文件來學習,並擺脫教程。還有看影片教程其實非常花費時間,所以儘量避免這種方式。
  4. 在人生的每一天裡探索自我邊界以外的東西。
  5. 資料結構與演算法的重要性。
  6. 敲程式碼時要注意細節,這種習慣可以提高你 Debug 的能力。

想起皓叔部落格裡的這句話:

無論你做什麼事,你都會面對各式各樣的困難,這對每個人來說都是一樣的,而只有興趣、熱情和成就感才能讓你不畏懼這些困難

更回顧 Review 的初衷是學習英語,所以還是乖乖地啃完英文原文吧。丟臉~

Tips

{success} 總結和歸納日常工作中的知識點,遇到的問題,踩過的坑。

  1. command + t open a new tab on google chrome
  2. 透過 Google Images 學習理解單詞: etc:gulf 要比 bay 所指的海灣更大。
  3. 遇到大數值需要遍歷的情況常常讓 PHP 捉襟見肘,但 生成器函式: yieldPHP中被忽略的效能最佳化利器:生成器可以發揮作用。
  4. array_search('c', ['a', 'b', 'c']) PHP 判斷 Array['a', 'b', 'c'] 中是否存 a 這個元素,並返回索引。
  5. Google Dictionary (Google chrome extend):雙擊即可彈出非常簡單的彈窗,附帶一個英文發音和簡短的英文釋義,用以輕度查詢
  6. 陳皓分享的科-學-上-網分享了很多好用的牆外伺服器攻略; 之前折騰了很久都沒有搭好SSR,這次跟著Google Cloud Platform免費申請&一鍵搭建SSR & BBR加速教程 可算一氣呵成。
  7. 為你的專案增加漂亮的 Markdown 文件——binarytorch/larecipe本部落格在用。

Share

{success} 輸出價值觀,分享一篇有觀點和思考的技術文章。

前幾個月就想開始 ARTS,苦於鑽研 PHP 的 Laravel 框架無法自拔所以一直拖到了這周。其實主要是開啟 LeetCode 一秒變睜眼瞎。

由於非計算機專業還多本科課程內容其實我是不具備的,這也導致我對演算法和資料結構望而卻步。但是今天開到 LeetCode 也支援 PHP 語法,謝天謝地頓時多了幾份信心。不過也只是剛開始學習 PHP 時接觸了一星半點資料結構與演算法,所以為了給自己增加信心就挑了我覺得最簡單的一道題:1. 兩數之和 解題語言 PHP;倒騰了 1 個小時,參考了其他同學的提交的答案才算做出來,但是發現執行用時 : 204 ms, 在Two Sum的PHP提交中擊敗了67.16% 的使用者。一定要再看看其他 33% 的 PHP 程式碼。

週末翻了下極客時間裡王爭老師的《資料結構與演算法之美》。其實之所以選這門課主要原因是感性的,覺得老師的名字像極了武林高手。學這門課光心理建設就花了半天時間,學習是要付出時間成本的,當然要想清楚為什麼一定要學,學會了以後對我有什麼幫助(短期或長遠)。

“其實學習資料結構和演算法,並不是為了 死記硬背幾個知識點。目的是建立時間複雜度,空間複雜度意識,寫出高質量的程式碼,能夠設計基礎架構,提升程式設計技能,訓練邏輯思維,積攢人生經驗,以此獲得工作回報,實現個人價值完善人生“ 原來對於學習這件事可以有這麼深刻的認知。我希望掌握資料結構與演算法,可以讓我對看問題的深度,解決問題的角度都有所改變。收藏同學的筆記:為什麼學習資料結構與演算法?

  1. 直接好處是能夠寫出效能更優的程式碼
  2. 演算法,是一種解決問題的思路和方法,有機會應用到生活和事業等其他方面。
  3. 長期來看,大腦思考能力是個人最重要的核心競爭力,而演算法是為數不多的能夠有效訓練大腦思考能力的途徑之一。
本作品採用《CC 協議》,轉載必須註明作者和本文連結
相信時間和變化

相關文章