复盘|第74场双周赛
将数组划分成相等数对
【哈希表】所有数字是否都是偶数频率。
【一次遍历】在遍历数组的同时判断奇偶性。
字符串中最多数目的子字符串
【贪心 + 一次遍历】设pattern[0] = a, pattern[1] = b,a插入的位置越左,答案包含的个数越多,b插入的位置越靠右,答案的个数越多。那么a应置于text最左侧,b应置于text最右侧,遍历text,每遇到一个b,就累加左边a的个数,需特判a=b的情况。代码里,放a or 放b可以一次遍历:放a在最左侧,每次b都会多算一个a,答案多cb个(c为b在text中的出现次数),放b在最右侧,b会与text所有a组成子序列,答案会多ca个(c是a在text中的出现次数)
将数组和减半的最少操作次数
【堆模拟】每次将堆顶减半,直到不低于总和的一半。
【堆模拟优化】不用浮点数——将每个数都乘2的幂次,并且原地修改。
用地毯覆盖后的最少白色砖块
【DP】定义dp[i] [j] 为用i条地毯覆盖前j块地板时,没被覆盖的白色地板的最少数目。转移状态是是否使用第i条地毯,且其末尾覆盖第j块地板。注意j < carpetLen * i 的dp[i]均为 0。
【DP】滚动数组优化压缩第一维。