判别首字母缩略词
Java
1 | class Solution { |
C++
1 | class Solution { |
k-avoiding 数组的最小总和
贪心。
Java
1 | class Solution { |
C++
1 | class Solution { |
销售利润最大化
不从动态规划的角度思考,我首先用的是对左端点排序。如果用动态规划,那么根据转移方程就会对右端点排序,处理方式也比对左端点排序简单一些。还可以不排序做,使用桶存储相同 \(end\) 的 \(offer\),分别处理每个桶。
Java
1 | class Solution { |
C++
1 | class Solution { |
找出最长等值子数组
Java
滑动窗口:
1 | class Solution { |
滑动窗口(优化):
- 优化一:观察到 \(1\leq nums[i]\leq nums.lenth\),所以可以用数组模拟哈希表。
- 优化二:滑动窗口直接枚举右端点,这样可以枚举到所有情况。但是如何保证删除的元素数量小于等于 \(k\) 呢?当左端点的值 \(nums[i]\) 不能构成等值数组,则将左端点右移。为什么这样可以保证?当 \(nums[i]\neq nums[j]\) 时,移动左端点不影响答案;当 \(nums[i]=nums[j]\) 时,移动左端点可以保证删除的元素数量小于等于 \(k\)。
1 | class Solution { |
C++
分组 + 双指针:
1 | class Solution { |