ARTS Week 29
阿新 • • 發佈:2022-03-15
Algorithm
本週的 LeetCode 題目為 334. 遞增的三元子序列
給你一個整數陣列 nums
,判斷這個陣列中是否存在長度為 3
的遞增子序列。
如果存在這樣的三元組下標 (i, j, k)
且滿足 i < j < k
,使得 nums[i] < nums[j] < nums[k]
,返回 true
;否則,返回 false
。
輸入:nums = [1,2,3,4,5]
輸出:true
解釋:任何 i < j < k 的三元組都滿足題意
本題可以使用貪心法進行求解,先初始化最小值(minVal
)和第二最小值(secondVal
)都是 Integer.MAX_VALUE
nums[i]
小於 minVal
時,則將 minVal
更新為 nums[i]
;當 minVal < nums[i] < secondVal
時,則將 secondVal
更新為 nums[i]
;若 nums[i] > secondVal
,則說明存在符合題意要求的三元組。若陣列遍歷結束仍未出現 nums[i] > secondVal
的情況,則說明不存在符合要求的三元組。
class Solution { public boolean increasingTriplet(int[] nums) { int minVal = Integer.MAX_VALUE; int secondMinVal = Integer.MAX_VALUE; boolean ans = false; for (int i = 0; i < nums.length; i++) { if (nums[i] <= minVal) { minVal = nums[i]; } else if (nums[i] <= secondMinVal) { secondMinVal = nums[i]; } else { ans = true; break; } } return ans; } }
Review
本週 Review 的英文文章為:為什麼你應該編寫糟糕的程式碼,且同時感覺良好
編寫好的程式碼可以更好地適應未來的世界,但在軟體中,我們很少知道未來的會怎樣,通常不確定性由以下原因導致:
- 不懂技術
- 不懂業務
- 不瞭解使用者
- 不清楚系統的資料大小
- 不知道程式碼的壽命
- 不知道的未知
程式設計師的長期價值是通過儘快學習創造,這也就是為什麼需要編寫更多糟糕的程式碼,下面是作者列舉的一些原因:
- 培養編寫程式碼的能力:如果你想學習如何編寫程式碼,那麼最好的方式就是去練習,通過練習,下一次將會變得更加容易並避免問題
- 重新獲得創作的喜悅:編寫糟糕的程式碼意味著專注於盡快獲得結果,這意味著很容易獲得成功和滿足的感覺
- 瞭解程式碼和系統因何失敗:失敗是最寶貴的學習機會,當出現問題後,解決編寫程式碼中的問題將會提高你的學習能力
- 瞭解如何除錯:編寫糟糕的程式碼時,將會給我更多機會嘗試除錯
- 探索設計空間:因為編寫了糟糕的程式碼,讓後續的重構設計有了更多的改進空間
- 降低期望會釋放更多的創造力和思想
Tip
C/C++語言中 extern
除了指定宣告外,當它和"C"
連用時,將告訴編譯器按照 C語言的規則去解析,而不是C++的規則,例如 extern "C" void fun(int a, int b);
這樣就可避免C++對fun函式的過載了。
Share
週末因為臨時的事情打亂了計劃,沒有來得及按時釋出,只好今天來填坑。看來以後還是要多多提早準備,這樣才能避免類似上週末的事情發生,抵抗未知的風險。