题目一 455. 分发饼干
思路
两个数组排序,然后遍历饼干数组,如果当前满足胃口,则胃口+1,否则不动,result记录
var findContentChildren = function(g, s) {
g.sort((a, b) => a - b);
s.sort((a, b) => a - b);
let gIndex = 0;
for (let i = 0; i < s.length; i++) {
if (s[i] >= g[gIndex]) {
gIndex++;
}
}
return gIndex;
};
题目二 376. 摆动序列
思路
遍历元素,记录前面两个数之差,以及当前两个数之差,如果pre <= 0 && cur > 0 说明遇到了波峰,结果+1,并将prediff进行更新
/**
* https://leetcode.cn/problems/wiggle-subsequence/
* @param {*} nums
* @returns
*/
var wiggleMaxLength = function(nums) {
let result = 0;
let preDiff = 0;
let curDiff = 0;
let len = nums.length;
if (len <= 2) {
return len;
}
for (let i = 0; i < nums.length; i++) {
curDiff = nums[i+1] - nums[i];
if ((preDiff <= 0 && curDiff > 0) || (preDiff >= 0 && curDiff < 0)) {
result++;
preDiff = curDiff;
}
}
return result + 1;
};
题目三 53. 最大子数组和
思路
遍历数组,记录当前元素相当后的和,如果相加之后小于0,则sum重0开始计数,遍历过程中记录sum的最大值。
局部最优解:局部和最大,遇到小于0了就清0,并且记录遍历路程中的最大和
/**
* https://leetcode.cn/problems/maximum-subarray/
* @param {number[]} nums
* @return {number}
*/
var maxSubArray = function(nums) {
let result = Number.MIN_SAFE_INTEGER;
let sum = 0;
for (let i = 0; i < nums.length; i++) {
sum += nums[i];
if (sum > result) {
result = sum;
}
if (sum < 0) {
sum = 0;
}
}
return result;
};