代码随想录算法训练营第三十一天| 理论基础 、455.分发饼干 、376. 摆动序列、53. 最大子序和

news2024/12/28 23:57:49

文章目录

      • 491.理论基础
      • 455.分发饼干
      • 376. 摆动序列:star:
      • 53. 最大子序和:star:

491.理论基础

  • 链接:代码随想录

  • 解题思路:

    通过局部最优,推出整体最优

image-20230414213904240

  • 如何验证贪心算法的正确性

    最好用的策略就是举反例,如果想不到反例,那么就试一试贪心吧。

455.分发饼干

  • 链接:代码随想录

大饼干配大胃口

  • 解题思路:
    让饼干不浪费即可
    这里的局部最优就是大饼干喂给胃口大的,充分利用饼干尺寸喂饱一个,全局最优就是喂饱尽可能多的小孩。
//思路一:小饼干喂给小胃口
public int findContentChildren(int[] g, int[] s) {

    int sum = 0;//结果
    int j = 0;

    //排序
    Arrays.sort(g);
    Arrays.sort(s);

    for (int i = 0; i < g.length; i++) {//遍历饼干

        while(j < s.length && s[j] < g[i]){//这个饼干不符合孩子肚量,直到找到符合胃口的
            j++;
        }
        //满足条件
        if(j < s.length){
            sum++;
            j++;
        }
        //超出范围
        if(j == s.length){
            break;
        }
    }

    return sum;
}
// 思路2:优先考虑胃口,先喂饱大胃口
public int findContentChildren(int[] g, int[] s) {
    Arrays.sort(g);
    Arrays.sort(s);
    int count = 0;
    int start = s.length - 1;
    // 遍历胃口
    for (int index = g.length - 1; index >= 0; index--) {
        if(start >= 0 && g[index] <= s[start]) { //优先喂饱大胃口的
            start--;
            count++;
        }
    }
    return count;
}

376. 摆动序列⭐️

  • 题目链接:代码随想录

摆动序列看一个元素的前后元素的差值的符号,小范围满足,则大范围也满足

  • 解题思路:
    局部最优:删除单调坡度上的节点(不包括单调坡度两端的节点),那么这个坡度就可以有两个局部峰值。
    **整体最优:**整个序列有最多的局部峰值,从而达到最长摆动序列。
    **贪心:**实际操作上,其实连删除的操作都不用做,因为题目要求的是最长摆动子序列的长度,所以只需要统计数组的峰值数量就可以了
    本题设置一个preDiff和curDiff记录操作元素和前后元素的差值
    本题需要注意三点

  • 注意三点

    • 上下坡中有平坡

      image-20230414201846282

    • 数组长度不够,在首尾两端

      image-20230414201950410

    • 单调坡有平坡 —> 多记录冗余值

      image-20230414202508933

*/
    public int wiggleMaxLength(int[] nums) {
    if(nums.length <= 1){
        return nums.length;
    }


    //记录当前差值
    int curDiff = 0;
    //记录先前差值
    int preDiff = 0;//初始值为0,解决数组长度为2的状况

    int res = 1;//记录结果,数组长度为2,默认为2

    //遍历
    for (int i = 1; i < nums.length; i++) {//i从1开始
        curDiff = nums[i] - nums[i - 1];//这里一定要从i开始,否则会越界

        if((preDiff >= 0 && curDiff < 0 ) || (preDiff <=0 && curDiff > 0)){//等于0是为了解决数组长度为2和中间平坡问题
            res++;//记录上下坡的值
            preDiff = curDiff;//这才更新数值,防止出现递增中间平坡问题

        }

    }

    return res;
}

53. 最大子序和⭐️

局部最优:

  1. 只要当前子序列和值为正数,那么就会对下一个元素起到正的反馈,这个子序列会越积越大,也就继续可以用这个序列
  2. 当前“连续和”为负数的时候立刻放弃**(将部分和置为0)**,从下一个元素重新计算“连续和”,因为负数加上下一个元素 “连续和”只会越来越小。
  • 题目链接:代码随想录

  • 解题思路:
    局部最优:只要当前子序列和值为正数,那么就会对下一个元素起到正的反馈,这个子序列会越积越大,也就继续可以用这个序列
    当前“连续和”为负数的时候立刻放弃,从下一个元素重新计算“连续和”,因为负数加上下一个元素 “连续和”只会越来越小。
    结果集每次比较sum和count[i]谁更大,从而决定返回哪个

     * 
          贪心算法:一次遍历即出结果,大大降低时间复杂度
    
  • 图像理解:

    53.最大子序和

public int maxSubArray(int[] nums) {
    if(nums.length == 1){
        return nums[0];
    }

    int sum = Integer.MIN_VALUE;//结果集
    int count = 0;//用来记录部分序列和

    for (int i = 0; i < nums.length; i++) {
        count += nums[i];

        sum = Math.max(sum, count);// 取区间累计的最大值(相当于不断确定最大子序终止位置)

        if(count < 0){
            count = 0;//相当于重置最大子序起始位置,因为遇到负数一定是拉低总和
        }
    }

    return sum;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/437375.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端项目打包并部署

一、vue项目打包 1.1 方式一&#xff1a;vue项目命令行打包 在当前项目路径下&#xff0c;执行命令 npm run build 在当前项目路径下&#xff0c;生成 一个dist文件夹。 将来部署项目&#xff0c;是部署的dist这个文件。 1.2 方式二&#xff1a;使用vue ui打包项目 在终端中…

前端学习之路 来自前端方向学生的总结

恭喜您&#xff01;您发现了宝藏&#xff01; 我发现很多小伙伴&#xff0c;对于前端感兴趣&#xff0c;也很想去学好&#xff0c;但是却无从下手&#xff0c;不知道如何去学习。作为一名现处于大三即将大四的学生&#xff0c;借此机会来分享分享我的前端学习之路&#xff01;…

扬帆优配|TMT板块密集发布减持计划 火爆行情潜藏估值难以匹配隐忧

4月以来&#xff0c;多家上市公司发表股东减持公告&#xff0c;其中一季度大热的TMT&#xff08;科技、媒体和电信&#xff09;板块的股东减持最为引人注目。 32只TMT股拟减持上限占比超1% 到4月18日&#xff0c;4月以来已有61家TMT板块上市公司发布减持方案。从拟变动数量上限…

神策数据荣登胡润百富 2023 全球独角兽榜

4 月 18 日&#xff0c;胡润研究院于广州 2023 全球独角兽 CEO 大会发布《2023 全球独角兽榜》&#xff08;Global Unicorn Index 2023&#xff09;&#xff0c;列出了全球成立于 2000 年之后&#xff0c;价值 10 亿美元以上的非上市公司&#xff08;估值计算日期截止 2022 年 …

自阿里P8爆出内部1031道java面试题后,在Boss直聘狂拿千份Offer

开始之前我问大家几个问题&#xff0c;看大家是如何思考的&#xff1a; 1.程序员一定要去一线城市漂泊吗&#xff1f;在自己家乡如何拿到一份满意的薪水&#xff1f; 2.程序员被裁员、找不到工作&#xff0c;代表什么&#xff1f; 3.程序员一定要进一线大厂吗&#xff1f;你…

手把手教你通过 Docker 部署前后端分离项目(亲测可用)

安装Docker 安装Nginx 安装Mysql 部署SpringBoot项目 部署Vue项目 一、安装Docker 1、安装&#xff1a; yum install docker 2、启动/停止/重启docker服务 service docker start service docker stop service docker restart 3、查看docker版本信息 docker version…

UDS 14229-1 诊断服务,两万字长文Trace版详细解读

&#x1f345; 我是蚂蚁小兵&#xff0c;专注于车载诊断领域&#xff0c;尤其擅长于对CANoe工具的使用&#x1f345; 寻找组织 &#xff0c;答疑解惑&#xff0c;摸鱼聊天&#xff0c;博客源码&#xff0c;点击加入&#x1f449;【相亲相爱一家人】&#x1f345; 玩转CANoe&…

Tomcat—javaEE

文章目录 1.定义及启动2.熟悉重点目录作用2.1bin2.2conf/server.xml2.3日志文件2.4webapps 3.部署和访问 1.定义及启动 &#xff08;1&#xff09;Tomcat属于web服务器的一种&#xff0c;也是servlet的一种 &#xff08;2&#xff09;Windows下&#xff0c;双击Tomcat下/bin/s…

ArcGIS|一文彻底搞懂GIS图斑编号

实际工作中&#xff0c;经常会有对各类图斑进行编号的需求。数据中图斑数比较少时&#xff0c;我们可以手动进行编号&#xff0c;但数据量较大时就必须得想办法自动实现图斑编号。今天&#xff0c;将分享几种常见的图斑自动编号方式&#xff0c;主要包括&#xff1a;图斑顺序编…

Mysql 触发器(复习)

今天考虑一个删除记录回收站的时候&#xff0c;突然想到了触发器这个东西&#xff0c;基本上之前也很少使用。废话不不多说&#xff0c;先看它的解释&#xff1a; 在MySQL中&#xff0c;触发器&#xff08;Trigger&#xff09;是一种特殊的存储过程&#xff0c;它会在指定的事…

[java/初学者]java常用API(2)——字符串

前言 所谓的字符串其实就是一串连续的字符&#xff0c;它是由许多单个字符连接而成的。如多个英文字母所组成的一个英文单词。字符串中可以包含任意字符&#xff0c;这些字符必须包含在一对双引号之内&#xff0c;例如“Dufeng”。 而与字符串相关的类都放在java.lang包中&…

Nuitka打包PyQt项目快速上手

之前用pyinstaller打包python程序&#xff0c;听说Nuitka比较快&#xff0c;用它打包PyQt的程序练练手。 Nuitka 问了问chatGPT&#xff0c;总结几点&#xff1a;将python编译成C/C&#xff0c;提高速率、跨平台、编译后程序直接运行&#xff08;不需要python解释器&#xff0…

【云原生】Kubernetes集群升级

【云原生】Kubernetes集群升级指南 前言一、集群升级过程辅助命令二、升级master节点2.1、升级kubeadm。2.2、验证升级计划2.3、master节点升级 三、升级node节点总结 前言 本文演示kubernetes集群从v1.24.1升级到v1.25.5。 相关文档。 一、集群升级过程辅助命令 &#xff0…

linux系统中MongoDB数据库安装及分片集群搭建

史上最全的mongodb分片集群搭建&#xff0c;从介绍安装到集群搭建授权&#xff0c;你再也找不到比他更加详细的资料了&#xff0c;未经允许禁止转载&#xff01;&#xff01; 一、简介 MongoDB是一个便于开发和扩展设计的文档数据库&#xff0c;属于NoSQL数据库的一种。Mongo…

计算机笔试/面试常见逻辑题/智力题汇总

说明&#xff1a;按种类汇总&#xff0c;难度不分先后&#xff0c;做了分级罗列&#xff0c;方便后续扩充&#xff0c;大家有比较有意思的题目可以在讨论区讨论。 下面有的题题解相对复杂的直接参考了网上的一些解答&#xff0c;而有的题解我认为并不好的也做了补充&#xff0c…

2023年值得关注的3个品牌趋势,帮你弯道超车

2023年&#xff0c;大环境开放&#xff0c;压抑三年的消费蓄势待发&#xff0c;品牌如何唤醒消费者的、热情成了重中之重的大事。 春风和煦&#xff0c;万物生长。又到了各类品牌、各位营销人踌躇满志、斗志昂扬的时候了&#xff0c;浅析一下2023品牌宣传趋势&#xff0c;抓住…

OpenCV 图像处理学习手册:1~5

原文&#xff1a;Learning Image Processing with OpenCV 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【ApacheCN 计算机视觉 译文集】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 当别人说你没有底线的时候&#xff0c;…

Redis删除键命令: 入门用del,老手用unlink,有何区别?

在Redis中&#xff0c;删除键是一项常见操作。Redis提供了两种删除键的方式&#xff1a;del和unlink。这两种方式看似类似&#xff0c;但实际上它们之间存在着不同之处。在本文中&#xff0c;我们将深入探讨这两种删除键的区别以及它们在实际应用中的使用。 一、del命令 del…

【OpenCV技能树】——二值图像处理

前言&#xff1a; &#x1f60a;&#x1f60a;&#x1f60a;欢迎来到本博客&#x1f60a;&#x1f60a;&#x1f60a; 目前正在进行 OpenCV技能树的学习&#xff0c;OpenCV是学习图像处理理论知识比较好的一个途径&#xff0c;至少比看书本来得实在。本专栏文章主要记录学习Op…

SDUT操作系统课程(CATS)专题二+专题四(参考总结)

专题二+进程调度算法 RR q=1(含做题代码) 总结:到达时间一到对应进程进入,执行队首进程一次,对应的服务时间划一记号(推荐用正字),队首进程未执行到完成的话重新进入队尾,队首进程执行到完成的话出队,下一秒继续执行队首进程,当5个进程全部入队之后只要执行后两步操…