算法训练第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
}
相关推荐
ZhengEnCi4 小时前
Agent 架构怎么选:从单 Agent 到多 Agent 编排的选型决策指南
算法·架构
秋天的怀念_David4 小时前
第二十二夜 · 数字迷雾
java·程序人生·算法
Pniubi5 小时前
力扣283移动零(双指针法)
算法·leetcode·职场和发展
hhb_6185 小时前
大模型落地三重优化实战
人工智能·算法·机器学习
云和数据.ChenGuang5 小时前
光哥说Python RAG 系统需要哪些评估指标:从检索到生成的全链路评测指南
网络·人工智能·python·算法·langchain
2601_970703837 小时前
工业除湿机租赁:把一份租金合同拆开看
大数据·数据结构·算法·数据库架构·推荐算法
心中有你02147 小时前
Java实现Dijkstra最短路径算法(邻接表 + 优先队列)
java·数据库·算法
ZhengEnCi8 小时前
同样的模型,为什么本地和云 API 差别那么大:量化精度、聊天模板与采样参数的三大元凶
人工智能·算法·llm
Flynn Liang8 小时前
RAG 答非所问/幻觉怎么破?Spring AI QuestionAnswerAdvisor 召回优化实战(TopK/重排/混合检索)
人工智能·算法·spring·rag·幻觉·springai
liminla!8 小时前
SQL 从入门到进阶:语法速查与实战练习(完整优化版)
数据库·sql·算法