交付:四种技巧一起验收
这是这条路线的最终作品。把对撞双指针、快慢指针、两种滑动窗口、差分全写出来,然后一次验完五条: 对撞找和为 40 的两个下标是 2 和 3 快慢找中点是 2;无环判 False、有环判 True 固定
阅读更多 →
第四步:差分
写出 range_add 和 restore,做 [0,2] 加 5、[1,3] 加 2,把还原结果拼起来输出。
阅读更多 →
第三步:两种窗口
写出 max_window(固定窗口最大和,k=3)和 min_len(和不小于 50 的最短长度)。 把两个结果拼起来输出。
阅读更多 →
第二步:快慢指针
写出 mid_index(找中点)和 has_cycle(判环)。 把三个结果拼起来输出:中点下标、无环判断、有环判断。
阅读更多 →
第一步:对撞双指针
最终作品第一步:写出 two_sum(有序数组,两数之和)。 把两个下标拼起来输出(目标 40)。
阅读更多 →
三个结果都对得上吗
运行下面这段程序: def two_sum(a, target): lo = 0 hi = len(a) - 1 while lo < hi: s = a
阅读更多 →
优化完之后必须做的一件事
把暴力法优化成 O(n) 之后,必须做的是【0】。
阅读更多 →
看到一个双循环,先问什么
想把一个双循环优化掉,先要问【0】。
阅读更多 →
找出所有字符都不同的那些窗口有几个
窗口长 3 滑一遍,数出有几个窗口里三个字符互不相同。 (互不相同等价于 len(cnt) == 3——所以上一节那个 del 在这里是决定性的。)
阅读更多 →
数出窗口里出现最多的字符出现几次
补全代码:窗口长 3 滑到末尾,输出最后那个窗口里出现最多的字符出现了几次。
阅读更多 →