貪心|455.分發(fā)餅干、376. 擺動(dòng)序列瞬沦、53. 最大子序和
代碼:
class Solution {
public:
int findContentChildren(vector<int>& g, vector<int>& s) {
sort(g.begin(), g.end());
sort(s.begin(), s.end());
int index = s.size() - 1; // 餅干數(shù)組的下標(biāo)
int result = 0;
for (int i = g.size() - 1; i >= 0; i--) { // 遍歷胃口
if (index >= 0 && s[index] >= g[i]) { // 遍歷餅干
result++;
index--;
}
}
return result;
}
};
代碼:
class Solution {
public:
int wiggleMaxLength(vector<int>& nums) {
if (nums.size() <= 1) return nums.size();
int curDiff = 0; // 當(dāng)前一對(duì)差值
int preDiff = 0; // 前一對(duì)差值
int result = 1; // 記錄峰值個(gè)數(shù)太伊,序列默認(rèn)序列最右邊有一個(gè)峰值
for (int i = 0; i < nums.size() - 1; i++) {
curDiff = nums[i + 1] - nums[i];
// 出現(xiàn)峰值
if ((preDiff <= 0 && curDiff > 0) || (preDiff >= 0 && curDiff < 0)) {
result++;
preDiff = curDiff; // 注意這里,只在擺動(dòng)變化的時(shí)候更新prediff
}
}
return result;
}
};
自己審題思路
代碼:
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int result = INT32_MIN;
int count = 0;
for (int i = 0; i < nums.size(); i++) {
count += nums[i];
if (count > result) { // 取區(qū)間累計(jì)的最大值(相當(dāng)于不斷確定最大子序終止位置)
result = count;
}
if (count <= 0) count = 0; // 相當(dāng)于重置最大子序起始位置逛钻,因?yàn)橛龅截?fù)數(shù)一定是拉低總和
}
return result;
}
};