三个字符都不同的窗口

窗口长 3 滑一遍,数出有几个窗口里三个字符互不相同。(互不相同等价于 cnt.size() == 3——所以 drop_ch 里那个 erase 在这里是决定性的。) (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

看到双循环先问什么

想把一个双循环优化掉,先要问【0】。

开始练习 →

优化完之后必须做的事

第 1 步:同一组数据,两种做法 第 2 步:暴力:所有子段都试一遍 第 3 步:窗口:两端各走一趟 第 4 步:答案对上了才算优化成功 答案 步数 暴力 窗口 3 28 3 14 把暴力法优化成 O(n) 之后,必须做的是【0】。

开始练习 →

三个结果都对得上吗

运行下面这段程序: #include <algorithm> #include <iostream> #include <map> #include <string> #include <

开始练习 →

第一步对撞双指针

最终作品第一步:补全 two_sum(有序数组,两数之和)。把两个下标用 / 连起来输出(目标 40)。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

第二步快慢指针

补全 mid_index(找中点)和 has_cycle(判环,-1 表示到头)。输出:中点下标 / 无环判断 / 有环判断。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

第三步两种窗口

补全 max_window(固定窗口最大和,k=3)和 min_len(和不小于 50 的最短长度)。两个结果用 / 连起来输出。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

第四步差分

补全 range_add 和 restore,做 [0,2] 加 5、[1,3] 加 2,把前 5 个位置的值用 / 连起来输出。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

交付四种技巧一起验收

这是这条路线的最终作品。对撞、快慢指针、固定窗口、暴力对照和差分都已给好,补全三处关键函数:has_cycle、min_len、restore。然后一次验完五条:对撞找和为 40 的两个下标是 2 和 3;中点是 2、无环判 false、有

开始练习 →

百万数据的双重循环

n = 10^6 时,O(n²) 的双重循环大约要做【0】次运算。

开始练习 →