1. 程式人生 > 其它 >ARTS Week 29

ARTS Week 29

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 的英文文章為:為什麼你應該編寫糟糕的程式碼,且同時感覺良好

編寫好的程式碼可以更好地適應未來的世界,但在軟體中,我們很少知道未來的會怎樣,通常不確定性由以下原因導致:

  • 不懂技術
  • 不懂業務
  • 不瞭解使用者
  • 不清楚系統的資料大小
  • 不知道程式碼的壽命
  • 不知道的未知

程式設計師的長期價值是通過儘快學習創造,這也就是為什麼需要編寫更多糟糕的程式碼,下面是作者列舉的一些原因:

  1. 培養編寫程式碼的能力:如果你想學習如何編寫程式碼,那麼最好的方式就是去練習,通過練習,下一次將會變得更加容易並避免問題
  2. 重新獲得創作的喜悅:編寫糟糕的程式碼意味著專注於盡快獲得結果,這意味著很容易獲得成功和滿足的感覺
  3. 瞭解程式碼和系統因何失敗:失敗是最寶貴的學習機會,當出現問題後,解決編寫程式碼中的問題將會提高你的學習能力
  4. 瞭解如何除錯:編寫糟糕的程式碼時,將會給我更多機會嘗試除錯
  5. 探索設計空間:因為編寫了糟糕的程式碼,讓後續的重構設計有了更多的改進空間
  6. 降低期望會釋放更多的創造力和思想

Tip

C/C++語言中 extern 除了指定宣告外,當它和"C"連用時,將告訴編譯器按照 C語言的規則去解析,而不是C++的規則,例如 extern "C" void fun(int a, int b); 這樣就可避免C++對fun函式的過載了。

Share

週末因為臨時的事情打亂了計劃,沒有來得及按時釋出,只好今天來填坑。看來以後還是要多多提早準備,這樣才能避免類似上週末的事情發生,抵抗未知的風險。