455.分发饼干
思路:
这里的局部最优就是大饼干喂给胃口大的,充分利用饼干尺寸喂饱一个,全局最优就是喂饱尽可能多的小孩。
代码实现:
var findContentChildren = function (g, s) {
g = g.sort((a, b) => a - b)
s = s.sort((a, b) => a - b)
let result = 0, index = s.length - 1;
for (let i = g.length - 1; i >= 0; i--) {
if (index >= 0 && s[index] >= g[i]) {
result++
index--
}
}
return result
};
376. 摆动序列
思路:
局部最优:删除单调坡度上的节点(不包括单调坡度两端的节点),那么这个坡度就可以有两个局部峰值。
整体最优:整个序列有最多的局部峰值,从而达到最长摆动序列。
代码实现:
var wiggleMaxLength = function (nums) {
if (nums.length <= 1) {
return nums.length;
}
let result = 1
let preDiff = 0;
let curDiff = 0
for (let i = 0; i < nums.length - 1; i++) {
curDiff = nums[i + 1] - nums[i];
if ((curDiff > 0 && preDiff <= 0) || (curDiff < 0 && preDiff >= 0)) {
result++
preDiff = curDiff
}
}
return result
}
53. 最大子序和
思路:
局部最优的情况下,并记录最大的“连续和”,可以推出全局最优。
代码实现:
var maxSubArray = function (nums) {
let result = -Infinity
let count = 0
for (let i = 0; i < nums.length; i++) {
count += nums[i]
if (count > result) {
result = count
}
if (count < 0) {
count = 0
}
}
return result
}
总结:
开启贪心算法的学习 加油加油!