理论基础
- 局部最优推出全局最优即可,没有技巧,模拟为主,多想反例
- 贪心无套路,要么简单要么很难,5分钟没思路,立刻看题解
心得
题解
- 优先满足大饼干供应大孩子,如果小饼干优先满足小孩子则外循环正好相反
- 单边按序遍历,即可节省内层循环
class Solution {
public:
int findContentChildren(vector<int>& g, vector<int>& s) {
if (s.size() == 0) return 0
sort(g.begin(), g.end())
sort(s.begin(), s.end())
int count = 0
int index = s.size() - 1
for (int i = g.size() - 1
if (index >=0 && g[i] <= s[index]) {
count++
index--
}
}
return count
}
}
心得
- 只是统计长度不需要真的删除数组元素,画出示意图了解两种平坡和虚拟起始点概念,遍历的其实位置是为了代码简洁性考虑
题解
class Solution {
public:
int wiggleMaxLength(vector<int>& nums) {
int curDiff = 0
int prevDiff = 0
int result = 1
if (nums.size() == 1) return result
for (int i = 0
curDiff = nums[i + 1] - nums[i]
if ((prevDiff >= 0 && curDiff < 0) || (prevDiff <= 0 && curDiff > 0)) {
result++
prevDiff = curDiff
}
}
return result
}
}
心得
题解
- 贪心贪的是前面连续求和大于0才能对后面的值增加有正效益
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int result = INT_MIN
int count = 0
for (int i = 0
count += nums[i]
if (count > result) result = count
if (count <= 0) count = 0
}
return result
}
}