当前位置: 首页 > news >正文

代码随想录刷题day27丨455.分发饼干 ,376. 摆动序列 ,53. 最大子序和

代码随想录刷题day27丨455.分发饼干 ,376. 摆动序列 ,53. 最大子序和

1.贪心算法理论基础

  • 贪心的本质是选择每一阶段的局部最优,从而达到全局最优

  • 这么说有点抽象,来举一个例子:

    例如,有一堆钞票,你可以拿走十张,如果想达到最大的金额,你要怎么拿?

    指定每次拿最大的,最终结果就是拿走最大数额的钱。

    每次拿最大的就是局部最优,最后拿走最大数额的钱就是推出全局最优。

  • 再举一个例子如果是 有一堆盒子,你有一个背包体积为n,如何把背包尽可能装满,如果还每次选最大的盒子,就不行了。这时候就需要动态规划。

  • 贪心算法并没有固定的套路。难点就是如何通过局部最优,推出整体最优。

  • 靠自己手动模拟,如果模拟可行,就可以试一试贪心策略,如果不可行,可能需要动态规划。

  • 如何验证可不可以用贪心算法呢?

    • 最好用的策略就是举反例,如果想不到反例,那么就试一试贪心吧
  • 贪心算法一般分为如下四步:

    • 将问题分解为若干个子问题
    • 找出适合的贪心策略
    • 求解每一个子问题的最优解
    • 将局部最优解堆叠成全局最优解

2.题目

2.1分发饼干

  • 题目链接:455. 分发饼干 - 力扣(LeetCode)

    在这里插入图片描述

  • 视频讲解:贪心算法,你想先喂哪个小孩?| LeetCode:455.分发饼干_哔哩哔哩_bilibili

  • 文档讲解:https://programmercarl.com/0455.%E5%88%86%E5%8F%91%E9%A5%BC%E5%B9%B2.html

  • 解题思路:贪心

    • 为了满足更多的小孩,就不要造成饼干尺寸的浪费。

      大尺寸的饼干既可以满足胃口大的孩子也可以满足胃口小的孩子,那么就应该优先满足胃口大的。

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

      在这里插入图片描述

  • 代码:

    class Solution {public int findContentChildren(int[] g, int[] s) {Arrays.sort(g);Arrays.sort(s);int result = 0;int index = s.length -1;for(int i = g.length - 1;i >= 0;i--){if(index >= 0 && s[index] >= g[i]){result++;index--;}}return result;}
    }
    
  • 总结:

    • 小饼干先喂饱小胃口也可以

2.2摆动序列

  • 题目链接:376. 摆动序列 - 力扣(LeetCode)

    在这里插入图片描述

  • 视频讲解:贪心算法,寻找摆动有细节!| LeetCode:376.摆动序列_哔哩哔哩_bilibili

  • 文档讲解:https://programmercarl.com/0376.%E6%91%86%E5%8A%A8%E5%BA%8F%E5%88%97.html

  • 解题思路:贪心

    • 在这里插入图片描述

    • 局部最优:删除单调坡度上的节点(不包括单调坡度两端的节点),那么这个坡度就可以有两个局部峰值

      整体最优:整个序列有最多的局部峰值,从而达到最长摆动序列

    • 在计算是否有峰值的时候,大家知道遍历的下标 i ,计算 prediff(nums[i] - nums[i-1]) 和 curdiff(nums[i+1] - nums[i]),如果prediff < 0 && curdiff > 0 或者 prediff > 0 && curdiff < 0 此时就有波动就需要统计。

    • 本题要考虑三种情况:

      1. 情况一:上下坡中有平坡

        在这里插入图片描述

      2. 情况二:数组首尾两端

        • 针对序列[2,5],可以假设为[2,2,5],这样它就有坡度了即 preDiff = 0,result 初始为 1(默认最右面有一个峰值)

          在这里插入图片描述

      3. 情况三:单调坡中有平坡

        在这里插入图片描述

        • 我们应该什么时候更新 prediff 呢?
          • 我们只需要在 这个坡度 摆动变化的时候,更新 prediff 就行,这样 prediff 在 单调区间有平坡的时候 就不会发生变化,造成我们的误判。
  • 代码:

    class Solution {public int wiggleMaxLength(int[] nums) {if(nums.length <= 1){return nums.length;}//当前差值int curDiff = 0;//上一个差值int preDiff = 0;//默认最右边有一个峰值int count = 1;//遍历到倒数第二个就行,最右边的已经默认了for(int i = 0;i < nums.length -1;i++){curDiff = nums[i + 1] - nums[i];if((curDiff > 0 && preDiff <= 0) || (curDiff < 0 && preDiff >= 0)){count++;preDiff = curDiff;}}return count;}
    }
    
  • 总结:

    • 为什么 preDiff = curDiff 放在条件判断内部这个位置?
      • 为了保证只有在波动方向改变时才更新 preDiff。如果波动方向没有变化(即不满足 (curDiff > 0 && preDiff <= 0) || (curDiff < 0 && preDiff >= 0)),那么 preDiff 保持不变,等待下一次有效的波动。

2.3最大子序和

  • 题目链接:53. 最大子数组和 - 力扣(LeetCode)

    在这里插入图片描述

  • 视频讲解:贪心算法的巧妙需要慢慢体会!LeetCode:53. 最大子序和_哔哩哔哩_bilibili

  • 文档讲解:https://programmercarl.com/0053.%E6%9C%80%E5%A4%A7%E5%AD%90%E5%BA%8F%E5%92%8C.html

  • 解题思路:贪心

    • 局部最优:当前“连续和”为负数的时候立刻放弃,从下一个元素重新计算“连续和”,因为负数加上下一个元素 “连续和”只会越来越小。
    • 全局最优:选取最大“连续和”
    • 局部最优的情况下,并记录最大的“连续和”,可以推出全局最优
  • 代码:

    class Solution {public int maxSubArray(int[] nums) {int result = Integer.MIN_VALUE;int count = 0;for(int i = 0;i < nums.length;i++){count += nums[i];if(count > result){result = count;}if(count < 0){count = 0;}}return result;}
    }
    
  • 总结:

    • 遇到连续和为负数才更新起始位置。并不是遇到负数就更新。

相关文章:

代码随想录刷题day27丨455.分发饼干 ,376. 摆动序列 ,53. 最大子序和

代码随想录刷题day27丨455.分发饼干 ,376. 摆动序列 ,53. 最大子序和 1.贪心算法理论基础 贪心的本质是选择每一阶段的局部最优&#xff0c;从而达到全局最优。 这么说有点抽象&#xff0c;来举一个例子&#xff1a; 例如&#xff0c;有一堆钞票&#xff0c;你可以拿走十张&a…...

Detect It Easy

Detect It Easy&#xff08;简称 DIE&#xff09;项目的网址为 https://github.com/horsicq/Detect-It-Easy 下载完安装包后&#xff0c;直接双击die.exe即可进入到操作界面 工具介绍&#xff1a; 它可以用来检测程序架构和文件类型。如图所示。其中&#xff0c;「模式」说明程…...

c++开关灯

题目描述 现有 &#x1d45b;n 盏灯排成一排&#xff0c;从左到右依次编号为&#xff1a;11&#xff0c;22&#xff0c;……&#xff0c;&#x1d45b;n。然后依次执行 &#x1d45a;m 项操作。 操作分为两种&#xff1a; 指定一个区间 [&#x1d44e;,&#x1d44f;][a,b]&…...

DevOps实现CI/CD实战(六)- Jenkins集成k8s

十、 Jenkins集成k8s Jenkins在集成K8s之前&#xff0c;需要搭建k8s集群&#xff0c;具体搭建步骤&#xff0c;完整笔记 https://github.com/ITenderL/ITenderL.github.io/tree/main/docs/DevOps&#xff0c; 包括完整的DevOps的笔记。 1. 准备部署的yml文件 pipeline.yml …...

张雪峰:物联网行业迎高光时刻!如何选择?我们诚聘销售工程师!

作为一间10多年的物联网公司&#xff0c;各位求职人士可以看看我们其中一个招聘要求&#xff0c;和自己需求结合分析分析&#xff0c;希望对你们有所帮助。 【公司实力底蕴】 盈电智控物联网科技&#xff08;广东&#xff09;有限公司&#xff0c;2024年7月成立&#xff0c;是…...

利用多文件编程实现顺序表的创建,判满,插入,输出

文章目录 &#x1f34a;自我介绍&#x1f34a;利用多文件编程实现顺序表的创建&#xff0c;判满&#xff0c;插入&#xff0c;输出seqlist.cseqlist.hmain.c 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以&#xff1a;点赞关注评论收藏&#xff08;一键四连&#xff…...

百度快照劫持之JS劫持诊断与恢复一例

劫持现象&#xff1a; 百度搜索结果中&#xff0c;被劫持网站出现在搜索结果中&#xff0c; 点击进入网站&#xff0c;网站显示正常&#xff0c;数秒后网站自动跳转到彩票网站f51688.com/ff6/。但是第二次点击搜索结果&#xff0c;正常进入网站缺不会跳转到彩票网站。 初步认…...

深入探讨Go语言中的切片与数组操作

在编程世界中&#xff0c;数组一直是非常流行的数据结构&#xff0c;主要有两个原因&#xff1a;其一是简单易懂&#xff0c;其二是非常灵活&#xff0c;可以存储多种不同类型的数据。在Go语言中&#xff0c;数组的用法有其独特的特点&#xff0c;但与此同时&#xff0c;Go语言…...

【WPS Excel】复制表格时,提示“图片太大,超过部份将被截去“ 问题

WPS表格 2019版本 升级到 WPS最新版 WPS-支持多人在线协作编辑Word、Excel和PPT文档_WPS官方网站 使用最新版就能够解决这个问题&#xff0c;如果仍旧无法解决可以勾选如下配置 重启Excel解决。 请勾选&#xff1a;文件 - 选项 - 编辑 - 不提示且不压缩文件中的图像...

驱动(RK3588S)第九课时:多节点驱动与函数接口

目录 一、多节点概念1、所用到的结构体说明2、函数接口主要是read和write函数2.1、把应用层的数据拷贝给底层2.2、把应用层的数据拷贝给底层 3、应用层的read和write函数4、底层的read和write函数二、ioctl控制命令接口1、概念2、函数介绍应用层和驱动层 三、代码与现象1.编写L…...

Linux系统下配置MySQL

1. 寻找MySQL的配置文件 MySQL的配置文件通常位于以下位置&#xff1a; 在大多数Linux系统上&#xff0c;主配置文件通常位于/etc/mysql/my.cnf或/etc/my.cnf。在macOS上&#xff0c;如果你使用Homebrew安装MySQL&#xff0c;配置文件通常位于/usr/local/etc/my.cnf。在Window…...

信捷 XD PLC POU编程之FB

在使用信捷的POU方式编程&#xff0c;可以建立两种POU:FB和FC。 FB和FC这两种POU又各自可以建立梯形图语言POU和C语言POU。 函数块&#xff08;FB&#xff09;是把反复使用的部分程序块转换成一种通用部件&#xff0c;他可以在程序中反复被调用&#xff0c;不仅 提高了程序的开…...

终于有人把云计算、大数据和人工智能讲明白了!

引言 在当今数字化时代&#xff0c;云计算、大数据和人工智能成为了全球科技界的热门话题。这些技术的迅猛发展以及应用范围的不断扩大&#xff0c;正深刻地改变着我们的生活和工作方式。云计算为我们提供了有效的计算和存储能力&#xff0c;大数据则以海量的信息资源为基础&a…...

【编程底层思考】详解Java内存模型(JMM)原理及其作用

Java内存模型&#xff08;Java Memory Model, JMM&#xff09;是Java虚拟机&#xff08;JVM&#xff09;的一个核心概念&#xff0c;它定义了Java程序中各种变量&#xff08;线程共享变量&#xff09;的访问规则&#xff0c;以及在并发环境下&#xff0c;为了确保数据的可见性、…...

Docker的基本概念和优势

Docker是一个开源的容器化平台&#xff0c;它可以将应用程序及其所有依赖项和运行环境打包到一个称为容器的独立单元中。容器化使得应用程序在不同的环境中可以以相同的方式运行&#xff0c;并且更加轻量级和可移植。 Docker的基本概念包括以下几点&#xff1a; 镜像&#xf…...

数据结构————内核链表

内核链表是Linux内核中广泛使用的一种数据结构&#xff0c;它具有以下特点&#xff1a; 1.双向循环链表&#xff1a;每个节点包含两个指针&#xff0c;一个指向前驱节点&#xff08;prev&#xff09;&#xff0c;另一个指向后继节点&#xff08;next&#xff09;&#xff0c;…...

使用API接口获取某宝商品数据详情

什么是淘宝API接口&#xff1f; 淘宝API接口是淘宝开放平台为开发者提供的一种应用程序接口。它允许开发者通过编程方式&#xff0c;安全、高效地与淘宝平台进行数据交互&#xff0c;从而获取商品详细信息、用户信息、订单信息等多种数据。这些接口不仅简化了数据获取流程&…...

用Python实现时间序列模型实战——Day 15: 时间序列模型的选择与组合

一、学习内容 1. 模型选择的标准与方法&#xff08;如 AIC、BIC&#xff09; 在时间序列建模中&#xff0c;模型的选择是非常重要的&#xff0c;常用的模型选择标准包括 AIC (Akaike Information Criterion) 和 BIC (Bayesian Information Criterion)。 AIC (Akaike Informat…...

大数据之Flink(五)

15、Flink SQL 15.1、sql-client准备 启用Hadoop集群(在Hadoop100上) start-all.sh启用yarn-session模式 /export/soft/flink-1.13.0/bin/yarn-session.sh -d启动sql-client bin/sql-client.sh embedded -s yarn-sessionsql文件初始化 可以初始化模式、环境&#xff08;流/批…...

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型&#xff0c;它综合考虑了土壤-水分-大气以及植被间的相互作用&#xff1b;是一种描述作物生长过程的一种机理性作物生长模型。它不但…...

基于 jenkins 的持续测试方案

CI/CD Continuous Integration; Continuous Deployment; 持续集成&#xff0c;将新代码和旧代码一起打包、构建&#xff1b;持续部署&#xff0c;将新构建的包进行部署&#xff1b;持续测试&#xff0c;将新代码、新单元测试一起测试&#xff1b;方案&#xff1a; 公有云DevO…...

我算见识到算法岗transformer面试的难度了

在面试算法岗的时候看到了这篇Transformer面试题&#xff0c;作者梳理一些关于Transformer的知识点&#xff0c;还会陆续更新最新的面试题和讲解答案&#xff01; 也算是见识到了transformer的面试难度了 1.Transformer为何使用多头注意力机制?(为什么不使用一个头) 2.Tra…...

CommonCollections1

CommonCollections1链 CommonCollections1poc展示调用链分析AbstractInputCheckedMapDecoratorTransformedMapChainedTransformerConstantTransformerInvokerTransformer poc分析通过反射实现Runtime.getRuntime().exec("calc.exe")forNamegetMethodinvoke 依据反射构…...

6、关于Medical-Transformer

6、关于Medical-Transformer Axial-Attention原文链接&#xff1a;Axial-attention Medical-Transformer原文链接&#xff1a;Medical-Transformer Medical-Transformer实际上是Axial-Attention在医学领域的运行&#xff0c;只是在这基础上增加了门机制&#xff0c;实际上也就…...

19_单片机开发常用工具的使用

工欲善其事必先利其器&#xff0c;我们做单片机开发的时候&#xff0c;不管是调试电路还是调试程序&#xff0c;都需要借助一些辅助工具来帮助查找和定位问题&#xff0c;从而帮助我们顺利解决问题。没有任何辅助工具的单片机项目开发很可能就是无法完成的任务&#xff0c;不过…...

最新版微服务项目搭建

一&#xff0c;项目总体介绍 在本项目中&#xff0c;我将使用alibabba的 nacos 作为项目的注册中心&#xff0c;使用 spring cloud gateway 做为项目的网关&#xff0c;用 openfeign 作为服务间的调用组件。 项目总体架构图如下&#xff1a; 注意&#xff1a;我的Java环境是17…...

spring揭秘19-spring事务01-事务抽象

文章目录 【README】【1】事务基本元素【1.1】事务分类 【2】java事务管理【2.1】基于java的局部事务管理【2.2】基于java的分布式事务管理【2.2.1】基于JTA的分布式事务管理【2.2.2】基于JCA的分布式事务管理 【2.3】java事务管理的问题 【3】spring事务抽象概述【3.1】spring…...

基于Matlab的图像去雾系统(四种方法)关于图像去雾的基本算法代码的集合,方法包括局部直方图均衡法、全部直方图均衡法、暗通道先验法、Retinex增强。

基于Matlab的图像去雾系统&#xff08;四种方法&#xff09; 关于图像去雾的基本算法代码的集合&#xff0c;方法包括局部直方图均衡法、全部直方图均衡法、暗通道先验法、Retinex增强。 所有代码整合到App designer编写的GUI界面中&#xff0c;包括导入图片&#xff0c;保存处…...

油猴插件录制请求,封装接口自动化参数

参考&#xff1a;如何使用油猴插件提高测试工作效率 一、背景 在酷家乐设计工具测试中&#xff0c;总会有许多高频且较繁琐的工作&#xff0c;比如&#xff1a; 查询插件版本&#xff1a;需要打开Chrome控制台&#xff0c;输入好几个命令然后过滤出版本信息。 查询模型商品&…...

循环购模式!结合引流和复购于一体的商业模型!

欢迎各位朋友&#xff0c;我是你们的电商策略顾问吴军。今天&#xff0c;我将向大家介绍一种新颖的商业模式——循环购模式&#xff0c;它将如何改变我们的消费和收益方式。你是否好奇&#xff0c;为何商家会提供如此慷慨的优惠&#xff1f;消费一千元&#xff0c;不仅能够得到…...