判断通过操作能否让字符串相等 I
同下。
判断通过操作能否让字符串相等 II
模拟。也可以手动比较,就是适用性不好。(PS:想出一个写法,结果被自己 Hack 掉了~)
1 | class Solution { |
几乎唯一子数组的最大和
滑动窗口。
1 | class Solution { |
统计一个字符串的 k 子序列美丽值最大的数目
因为和选择的顺序没有关系,所以贪心的选择出现次数最大的字母就行。
1 | class Solution { |
同下。
模拟。也可以手动比较,就是适用性不好。(PS:想出一个写法,结果被自己 Hack 掉了~)
1 | class Solution { |
滑动窗口。
1 | class Solution { |
因为和选择的顺序没有关系,所以贪心的选择出现次数最大的字母就行。
1 | class Solution { |
核心:要距离原点最远,那么可选的位置肯定是向同一个方向移动。
1 | class Solution { |
和上周一样的题目。
1 | class Solution { |
比赛时思路满天飞,各种乱写。其实最后的思路是对的,但是基于之前的代码改写,导致有很多 Bug。赛后 15 分钟 AC。从低位到高位枚举 \(target\) 中的 \(1\),假设当前 \(1\) 对应的值为 \(x\),那么 \(nums\) 中所有小于等于 \(x\) 的值都可以用来填补 \(x\),如果不够那么肯定需要将下一个大于 \(x\) 的值分解为 \(x\)。(更优的做法)
1 | class Solution { |
参考大佬的题解。
方法一:倍增 DP
因为 CPU 缓存的原因,数组开成 new int[35][n]
会更快。因为这样转移的时候只从上一行转移,具有空间局部性;而下面的代码是从左边一列转移,不具有空间局部性。
1 | class Solution { |
方法二:内向基环树
1 | class Solution { |
Java
1 | class Solution { |
C++
1 | class Solution { |
贪心。
Java
1 | class Solution { |
C++
1 | class Solution { |
不从动态规划的角度思考,我首先用的是对左端点排序。如果用动态规划,那么根据转移方程就会对右端点排序,处理方式也比对左端点排序简单一些。还可以不排序做,使用桶存储相同 \(end\) 的 \(offer\),分别处理每个桶。
Java
1 | class Solution { |
C++
1 | class Solution { |
Java
滑动窗口:
1 | class Solution { |
滑动窗口(优化):
1 | class Solution { |
C++
分组 + 双指针:
1 | class Solution { |