算法训练第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
}
相关推荐
全干engineer1 小时前
web3-基于贝尔曼福特算法(Bellman-Ford )与 SMT 的 Web3 DeFi 套利策略研究
算法·金融·web3·去中心化·区块链·智能合约
Splendid1 小时前
Geneformer:基于Transformer的基因表达预测深度学习模型
javascript·算法
愿所愿皆可成2 小时前
机器学习之聚类Kmeans算法
算法·机器学习·kmeans·聚类
幻奏岚音2 小时前
统计学(第8版)——假设检验学习笔记(考试用)
笔记·学习·算法
hie988942 小时前
基于matlab策略迭代和值迭代法的动态规划
算法·动态规划
Coovally AI模型快速验证2 小时前
SFTrack:面向警务无人机的自适应多目标跟踪算法——突破小尺度高速运动目标的追踪瓶颈
人工智能·神经网络·算法·yolo·计算机视觉·目标跟踪·无人机
Brduino脑机接口技术答疑2 小时前
脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)
人工智能·算法·脑机接口·新手入门
真的很上进2 小时前
2025最全TS手写题之partial/Omit/Pick/Exclude/Readonly/Required
java·前端·vue.js·python·算法·react·html5
linweidong2 小时前
GO 基础语法和数据类型面试题及参考答案(下)
算法·后端面试·泛型·go面试·go面经·go求职
圈圈编码3 小时前
LeetCode Hot100刷题——合并两个有序链表
java·数据结构·算法·leetcode·链表