代码随想录Day29打卡 贪心算法(1)

31 阅读1分钟

53 最大子数组和

用一个curr来记录当前的子数组的和,如果当前子数组和已经小于0,那么就直接从0开始计算。但是要先更新res。

var maxSubArray = function(nums) {
    let res = -Infinity, curr = 0
    for (const num of nums) {
        curr += num
        res = Math.max(res, curr)
        curr = Math.max(curr, 0)
    }
    return res
};

455 分发饼干

先排序,然后满足胃口最小的小朋友

var findContentChildren = function(g, s) {
    g.sort((a, b) => a - b)
    s.sort((a, b) => a - b)
    let i = 0, j = 0
    let res = 0
    while (i < g.length && j < s.length) {

        if (s[j] >= g[i]) {
            res += 1
            i += 1
            j += 1
        } else {
            j += 1
        }
    }
    return res
};

376 摆动序列

    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++
            // 只有峰值变化的时候,更新prevdiff
            preDiff = curDiff
        }
    }
    return result