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

ARTS Week 21

Algorithm

本週的 LeetCode 題目為 33. 搜尋旋轉排序陣列

整數陣列 nums 按升序排列,陣列中的值 互不相同

在傳遞給函式之前,nums 在預先未知的某個下標 k0 <= k < nums.length)上進行了 旋轉,使陣列變為 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下標從0 開始計數)。例如, [0,1,2,4,5,6,7] 在下標 3 處經旋轉後可能變為 [4,5,6,7,0,1,2]

給你 旋轉後 的陣列 nums 和一個整數 target ,如果 nums

中存在這個目標值 target ,則返回它的下標,否則返回 -1

輸入:nums = [4,5,6,7,0,1,2], target = 0
輸出:4
class Solution {
    public int search(int[] nums, int target) {
        if (nums.length == 1) {
            if (nums[0] == target) {
                return 0;
            } else {
                return -1;
            }
        }

        int left = 0;
        int right = nums.length - 1;
        int ans = -1;
        while (left < right) {
            if (nums[left] == target) {
                ans = left;
                break;
            }
            if (nums[right] == target) {
                ans = right;
                break;
            }

            int mid = left + (right - left) / 2;
            if (nums[mid] == target) {
                ans = mid;
                break;
            }

            if (nums[mid] >= nums[0]) { // nums[0], NOT nums[mid]
                if (target >= nums[0] && target < nums[mid]) {
                    right = mid - 1;
                } else {
                    left = mid + 1;
                }
            } else {
                if (target > nums[mid] && target < nums[right]) {
                    left = mid + 1;
                } else {
                    right = mid - 1;
                }
            }
        }
        return ans;
    }
}

Review

本週 Review 的英文文章為:我希望我早點兒知道的一些事情

作者在文中介紹了他自己常用的一些軟體、工具等。下面是具體介紹:

  1. Anki:Anki 是一個免費的開源抽認卡程式,你可以利用它來幫你記住任何東西。
  2. Dextroamphetamine:是一種可以增強認知的興奮劑
  3. R:R語言可以有效地組織和視覺化資料
  4. sci-hub 和 Kindle、Z-Library、Calibre:sci-hub 可以免費獲取到很多科學論文;Kindle 是閱讀工具,你可以在 Z-Library 上找到很多想要的書,再通過 Calibre 來將這些書匯入到 Kindle 中
  5. 保持良好的開放判斷:你可以通過購買、閱讀大量書籍,來使得你更加理性並減少偏見認知的影響。

Tip

為什麼 printf 在呼叫後不會及時輸出?因為在預設情況下,輸出流 stdout 是有緩衝的,如果你想要立即輸出,那麼則需要重新整理流(使用 fflush)或在 printf 中列印換行符:

// Method 1:
printf("Starting nets allocation...");
fflush(stdout);

// Method 2:
printf("Starting nets allocation...\n");

Share

看了上面的 Review 中的介紹,打算去試一試 Anki 這個軟體。