⚠️ 删键和不删键,一次对比
把"删键"和"不删键"两个版本都跑一遍,把两个种类数拼起来输出(不删的在前)。 ——这一个字符的差别,在真实题目里就是答案对不对。
阅读更多 →
写一对 add / remove
补全 add 和 remove:remove 减到 0 时要把键删掉。 滑完之后输出窗口里有几种字符。
阅读更多 →
删了键之后呢
同样的滑动,这次减到 0 就把键删掉。运行它: def add(cnt, ch): cnt[ch] = cnt.get(ch, 0) + 1 def remove(cnt, ch):
阅读更多 →
⚠️ 不删键会数出几种
字符串 abcabcbb,窗口长 3 一路滑到末尾。这个版本减到 0 也不删键。运行它: cnt = {} s = "abcabcbb" k = 3 for i in range(
阅读更多 →
⚠️ 计数减到 0 时为什么要删掉这个键
用字典记窗口里各元素的次数,某个元素减到 0 时应该把键删掉,因为【0】。
阅读更多 →
窗口移动时状态要怎么维护
窗口每移动一次,附带的状态(比如各元素出现次数)要【0】。
阅读更多 →
⚠️ 差分和暴力结果必须一样
把差分版和逐个加的暴力版都写出来,做同样两次区间加,比较两者的结果。 一样输出 结果一致,否则输出 结果不一致。
阅读更多 →
写一个还原
补全 restore:对差分数组求前缀和,还原出每个位置的真实值。
阅读更多 →
写一个区间加
补全 range_add:在差分数组上给 [l, r] 每个元素加 v。 做两次区间加之后把还原结果拼起来输出。
阅读更多 →
差分省了多少
做 500 次区间修改、每次区间长 1000:暴力是逐个加,差分只动两格。运行下面这段程序: def brute(m, L): return m * L def diff_ops(m):
阅读更多 →