写一个区间加

补全 range_add:在差分数组上给 [l, r] 每个元素加 v。做两次区间加之后把还原结果用 / 连起来输出。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

写一个还原

补全 restore:对差分数组求前缀和,还原出前 n 个位置的真实值。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

差分和暴力结果对一对

差分版已经给好。补全暴力版 brute_apply:开一个长 n 的数组,给 [0,2] 逐个加 5、[1,3] 逐个加 2。两边结果一样输出 结果一致,否则输出 结果不一致。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

窗口移动时状态怎么维护

第 1 步:窗口 abc:三种各 1 个 第 2 步:进 a 出 a 第 3 步:进 b 出 b 第 4 步:进 c 出 c 第 5 步:进 b 出 a 第 6 步:进 b 出 b 第 7 步:a 减到 0 了:键要删掉 a b c a b

开始练习 →

计数减到 0 为何要删键

用 map<char, int> 记窗口里各字符的次数,某个字符减到 0 时应该 erase 掉这个键,因为【0】。

开始练习 →

不删键会数出几种

字符串 abcabcbb,窗口长 3 一路滑到末尾。这个版本减到 0 也不删键。运行它: #include <algorithm> #include <iostream> #include <map> #

开始练习 →

删了键之后呢

同样的滑动,这次减到 0 就 erase 掉。运行它: #include <algorithm> #include <iostream> #include <map> #include <strin

开始练习 →

写一对 add 和 drop

补全 add_ch 和 drop_ch:drop_ch 减到 0 时要 erase 掉这个键。滑完之后输出窗口里有几种字符。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

删键和不删键一次对比

补全 kinds_erase(用 add_ch / drop_ch 维护),再和不删键的 kinds_keep 一起跑,把两个种类数用 / 连起来输出(不删的在前)。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

窗口里最多的字符出现几次

补全代码:窗口长 3 滑到末尾,输出最后那个窗口里出现最多的字符出现了几次。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →