算法训练第23天|455.分发饼干|376. 摆动序列|53. 最大子序和

LeetCode 455.分发饼干

题目链接:455.分发饼干

题目讲解:代码随想录

题目描述:假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。

对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。

思路:这里的局部最优就是大饼干喂给胃口大的,充分利用饼干尺寸喂饱一个,全局最优就是喂饱尽可能多的小孩

可以尝试使用贪心策略,先将饼干数组和小孩数组排序。

然后从后向前遍历小孩数组,用大饼干优先满足胃口大的,并统计满足小孩数量。

Go 复制代码
func findContentChildren(g []int, s []int) int {
    // 大饼干优先
    sort.Ints(g)
    sort.Ints(s)
    index := len(s) - 1
    result := 0
    for i := len(g) - 1; i >= 0; i--{
        if index >= 0 && s[index] >= g[i]{
            result++
            index--
        }
    }
    return result
}

LeetCode 376. 摆动序列

题目链接:376. 摆动序列

题目讲解:代码随想录

题目描述:如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列 。第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。

思路:题目要求的是最长摆动子序列的长度,所以只需要统计数组的峰值数量就可以了。

本题要考虑三种情况:

  1. 情况一:上下坡中有平坡,例如 [1,2,2,2,1]这样的数组
  2. 情况二:数组首尾两端,如果只有两个不同的元素,那摆动序列也是 2。例如序列[2,5],如果靠统计差值来计算峰值个数就需要考虑数组最左面和最右面的特殊情况。
  3. 情况三:单调坡中有平坡,如果在一个单调坡度上有平坡,例如[1,2,2,2,3,4],我们只需要在 这个坡度摆动变化的时候,更新 prediff 就行,这样 prediff 在单调区间有平坡的时候就不会发生变化,造成我们的误判。
Go 复制代码
func wiggleMaxLength(nums []int) int {
    // 贪心
    n := len(nums)
    if n < 2{
        return n
    }

    ans := 1
    prevDiff := nums[1] - nums[0]
    if prevDiff != 0{
        ans = 2
    }

    for i := 2; i < n; i++{
        diff := nums[i] - nums[i-1]
        if diff > 0 && prevDiff <= 0 || diff < 0 && prevDiff >=0{
            ans++
            prevDiff = diff
        }
    }
    return ans
}

LeetCode 53. 最大子序和

题目链接:53. 最大子序和

题目讲解:代码随想录

题目描述:给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组是数组中的一个连续部分

思路:

局部最优:当前"连续和"为负数的时候立刻放弃,从下一个元素重新计算"连续和",因为负数加上下一个元素 "连续和"只会越来越小。

全局最优:选取最大"连续和"

Go 复制代码
func maxSubArray(nums []int) int {
    // 贪心
    max := nums[0]
    count := 0
    for i := 0; i < len(nums); i++{
        count += nums[i]
        if count > max{
            max = count
        }
        if count < 0{
            count = 0
        }
    }
    return max
}
相关推荐
朝朝又沐沐1 小时前
基于算法竞赛的c++编程(28)结构体的进阶应用
开发语言·c++·算法
代码雕刻家2 小时前
7.4.分块查找
c语言·数据结构·算法
摆烂工程师3 小时前
o3-pro 发布上线了!成本降了80%,温柔的奇点(Team用户也可用)
人工智能·算法·程序员
好易学·数据结构3 小时前
可视化图解算法50:最小的K个数
数据结构·算法·leetcode·面试·力扣·笔试·牛客
秋山落叶万岭花开ღ3 小时前
深入探索串的高级操作:从算法到 LeetCode 实战
数据结构·python·算法
Bt年3 小时前
浮点数精度问题(CSP38思考)
开发语言·c++·算法
谷哥的小弟3 小时前
重温经典算法——二分查找
算法
开压路机3 小时前
算法:模拟
算法
learn_coder4 小时前
运动控制--小车的启动和停止算法
算法