ARTS (第一週)

iVerywang發表於2019-03-17

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

Algorithm

主要是為了程式設計訓練和學習。每週至少做一個 leetcode 的演算法題(先從 Easy 開始,然後再 Medium,最後才 Hard)。進行程式設計訓練,如果不訓練你看再多的演算法書,你依然不會做演算法題,看完書後,你需要訓練。關於做Leetcode的的優勢,你可以看一下 coolshell 上的文章 Leetcode 程式設計訓練 - 酷 殼 - CoolShell

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

主要是為了學習英文,如果你的英文不行,你基本上無緣技術高手。所以,需要你閱讀並點評至少一篇英文技術文章

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

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

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

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

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

Tip

Tip:主要是為了總結和歸納你在是常工作中所遇到的知識點。學習至少一個技術技巧。你在工作中遇到的問題,踩過的坑,學習的點滴知識。

Share

Share:主要是為了建立你的影響力,能夠輸出價值觀。分享一篇有觀點和思考的技術文章。

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

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

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

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

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

善始善終 嗯!