每週完成一個 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 上找中文翻譯了,這篇文章的重點可以概括為以下幾點:
- 要可以鍛鍊我們獨立解決問題的能力。
- 最好用谷歌搜尋你在 Coding 中遇到的問題。
- 最好通過文件來學習,並擺脫教程。還有看視訊教程其實非常花費時間,所以儘量避免這種方式。
- 在人生的每一天裡探索自我邊界以外的東西。
- 資料結構與演算法的重要性。
- 敲程式碼時要注意細節,這種習慣可以提高你 Debug 的能力。
想起皓叔部落格裡的這句話:
無論你做什麼事,你都會面對各式各樣的困難,這對每個人來說都是一樣的,而只有興趣、熱情和成就感才能讓你不畏懼這些困難
更回顧 Review 的初衷是學習英語,所以還是乖乖地啃完英文原文吧。丟臉~~~
Tip
Tip:主要是為了總結和歸納你在是常工作中所遇到的知識點。學習至少一個技術技巧。你在工作中遇到的問題,踩過的坑,學習的點滴知識。
command + t
open a new tab on google chrome- 通過 Google Images 學習理解單詞: etc:gulf 要比 bay 所指的海灣更大。
- 遇到大數值需要遍歷的情況常常讓 PHP 捉襟見肘,但 生成器函式:
yield
。PHP中被忽略的效能優化利器:生成器可以發揮作用。 array_search('c', ['a', 'b', 'c'])
PHP 判斷Array['a', 'b', 'c']
中是否存a
這個元素,並返回索引。- Google Dictionary (Google chrome extend):雙擊即可彈出非常簡單的彈窗,附帶一個英文發音和簡短的英文釋義,用以輕度查詢
-陳皓分享的科-學-上-網分享了很多好用的牆外伺服器攻略; 之前折騰了很久都沒有搭好SSR,這次跟著Google Cloud Platform免費申請&一鍵搭建SSR & BBR加速教程 可算一氣呵成。
Share
Share:主要是為了建立你的影響力,能夠輸出價值觀。分享一篇有觀點和思考的技術文章。
前幾個月就想開始 ARTS,苦於鑽研 PHP 的 Laravel 框架無法自拔所以一直拖到了這周。其實主要是開啟 LeetCode 一秒變睜眼瞎。
由於非計算機專業還多本科課程內容其實我是不具備的,這也導致我對演算法和資料結構望而卻步。但是今天開到 LeetCode 也支援 PHP 語法,謝天謝地頓時多了幾份信心。不過也只是剛開始學習 PHP 時接觸了一星半點資料結構與演算法,所以為了給自己增加信心就挑了我覺得最簡單的一道題:1. 兩數之和 解題語言 PHP;倒騰了 1 個小時,參考了其他同學的提交的答案才算做出來,但是發現執行用時 : 204 ms, 在Two Sum的PHP提交中擊敗了67.16% 的使用者。一定要再看看其他 33% 的 PHP 程式碼。
週末翻了下極客時間裡王爭
老師的《資料結構與演算法之美》。其實之所以選這門課主要原因是感性的,覺得老師的名字像極了武林高手。學這門課光心理建設就花了半天時間,學習是要付出時間成本的,當然要想清楚為什麼一定要學,學會了以後對我有什麼幫助(短期或長遠)。
“其實學習資料結構和演算法,並不是為了 死記硬背幾個知識點。目的是建立時間複雜度,空間複雜度意識,寫出高質量的程式碼,能夠設計基礎架構,提升程式設計技能,訓練邏輯思維,積攢人生經驗,以此獲得工作回報,實現個人價值完善人生“ 原來對於學習這件事可以有這麼深刻的認知。我希望掌握資料結構與演算法,可以讓我對看問題的深度,解決問題的角度都有所改變。收藏同學的筆記:為什麼學習資料結構與演算法?
- 直接好處是能夠寫出效能更優的程式碼
- 演算法,是一種解決問題的思路和方法,有機會應用到生活和事業等其他方面。
- 長期來看,大腦思考能力是個人最重要的核心競爭力,而演算法是為數不多的能夠有效訓練大腦思考能力的途徑之一。
本作品採用《CC 協議》,轉載必須註明作者和本文連結