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 这个软件。

posted @ 2022-01-15 21:51  永远是萌新的阿岩  阅读(34)  评论(0编辑  收藏  举报