代码随想录训练营第31天|LeetCode 455.分发饼干、 376. 摆动序列、53. 最大子序和

news2025/8/3 17:49:14

参考

代码随想录

什么是贪心算法

贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解 。
贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择 。
举个例子,例如,有一堆钞票,你可以拿走十张,如果想达到最大的金额,你要怎么拿?指定每次拿最大的,最终结果就是拿走最大数额的钱。每次拿最大的就是局部最优,最后拿走最大数额的钱就是推出全局最优。

题目一:LeetCode 455.分发饼干

对胃口值和饼干尺寸都进行排序,然后最大的饼干优先满足胃口值较大的。这里求解思想是贪心,实现过程用的是双指针,一个遍历g,一个遍历s。

class Solution {
public:
    int findContentChildren(vector<int>& g, vector<int>& s) {
        sort(g.begin(),g.end());
        sort(s.begin(),s.end());
        int i = g.size() - 1;
        int j = s.size() - 1;
        int maxNum = 0;
        while(j >= 0 && i >= 0){
            if(s[j] >= g[i]){
                maxNum++;
                j--;
                i--;
            }
            else{
                i--;
            }
        }
        return maxNum;
    }
};

题目二:LeetCode 376.摆动序列

题目中说子序列 可以通过从原始序列中删除一些(也可以不删除)元素来获得,剩下的元素保持其原始顺序。但其实不必删除元素,因为只需要求序列长度而不需要直到具体的序列。代码随想录中给出的方法是求极值,但是这样会涉及到边界的处理,最左边和做右边的两个点不好处理。进一步,可以转化为求区间,一个区间对应着两个点,中间点是两个区间共用的,因此最后的子序列长度等于区间数再加1,这里的区间是递增和递减交替出现的,如下图所示:
在这里插入图片描述
求递增和递减区间就可以不用关注边界点了。用两个变量来记录上一个区间和当前区间的变化情况(包括递增和递减,注意这里只求递增和递减区间,保持不变的情况不统计),这里用-1表示递减,1表示递增,0表示保持不变,这样只要上一个区间的状态的当前不同就认为是两个区间。这样做可以不用关注边界。
总结来说,就是把原来的小区间按照其数值的变化情况重新划分区间,划分为三大类:递增,递减,非增非减(即保持不变),但是只统计递增和递减区间。
代码实现如下:

class Solution {
public:
    int wiggleMaxLength(vector<int>& nums) {
        int len = 0;
        int pre = 0;  //用0标记区间内数值保持不变的情况,这种区间不统计
        int cur;
        for(int i = 1;i < nums.size(); i++){
            int diff = nums[i] - nums[i-1];
            if(diff > 0) cur = 1;  //用1标记递增
            else if(diff < 0) cur = -1;  //用-1标记递减
            else cur = 0;   //用0标记数值保持不变
            if(cur != 0 && cur != pre){  //如果两个区间增减不同就进行统计
                len++;
                pre = cur;
            }
        }
        return len+1;
    }
};

题目三:LeetCode 53.最大子序和

可以用暴力求解,但是会超时。两层for循环,i遍历外层,j遍历内层,组成的区间为[i,j]。代码如下:

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
    	int sum ;
    	int max = INT_MIN;
        for(int i = 0; i < nums.size(); i++){
            sum = 0;
            for(int j = i; j < nums.size(); j++){
                sum += nums[j];
                if(sum > max)   max = sum;
            }
        }
        return max;
    }
};

贪心解法

贪心贪的是哪里呢?

如果 -2 1 在一起,计算起点的时候,一定是从1开始计算,因为负数只会拉低总和,这就是贪心贪的地方!

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

全局最优:选取最大“连续和”

局部最优的情况下,并记录最大的“连续和”,可以推出全局最优。

从代码角度上来讲:遍历nums,从头开始用sum累积,如果sum一旦加上nums[i]变为负数,那么就应该从nums[i+1]开始从0累积sum了,因为已经变为负数的count,只会拖累总和。

这相当于是暴力解法中的不断调整最大子序和区间的起始位置。
代码实现如下:

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int max = INT_MIN;
        int sum = 0;
        for(int i = 0; i< nums.size(); i++){
            sum += nums[i];
            if(sum > max)   max = sum;
            if(sum <= 0) sum = 0;
        }
        return max;
    }
};

注意,每次加上nums[i]后应该更新max的值,即使max当前可能为负数,因为可能整个数组都是负数,那么最大值也只能是负数。

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

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

相关文章

hive表加载csv格式数据或者json格式数据

先说简单的使用 CREATE TABLE cc_test_serde( id string COMMENT from deserializer, name string COMMENT from deserializer) ROW FORMAT SERDE org.apache.hadoop.hive.serde2.JsonSerDe STORED AS INPUTFORMAT org.apache.hadoop.mapred.TextInputFormat OUTPUTFO…

Qt第二十三章:设置窗口、控件背景颜色

修改样式表&#xff1a;设置后发现影响所有控件内的背景色事件触发样式&#xff1a;鼠标划过触发样式设置背景图背景图打包。 py代码中引用 将resources.qrc文件进行转化成py文件 在我们将xxx.ui文件转换成py文件的时候会自动引用resources.qrc 实际使用中发现&#xff1a;back…

Linux系统认知——常用命令(全)

文章目录一、帮助命令1.man&#xff08;查看帮助手册&#xff09;2.info&#xff08;阅读 info 格式的文档&#xff09;3.whatis&#xff08;查询命令功能&#xff09;二、文件及目录相关命令1.touch&#xff08;创建新的空文件&#xff0c;改变已有文件的时间戳&#xff09;2.…

黑马学员放弃20K月薪投身比亚迪,是去「车间」打螺丝吗?

黑马学员进互联网企业的新闻不稀奇&#xff0c;但黑马学员进“工厂”的新闻&#xff0c;就稀奇了。 黑马学员&#xff0c;互联网人&#xff0c;“工厂”&#xff0c;这几个词放在一起&#xff0c;怎么看怎么不顺眼。甚至有人会觉得魔幻&#xff0c;敲代码的、搞设计的脑力工作…

数据技术前沿趋势、TiDB 产品方向、真实场景 Demo… 丨PingCAP DevCon 2022 产品技术论坛预览

现在报名活动&#xff0c;有机会获得限定好礼哦&#xff01;&#x1f446; 2022 年 5 月&#xff0c;TiDB 进入了 V6 时代。从 TiDB 第一个 Beta 版本开始&#xff0c;OLTP Scale、Real-time HTAP、TiDB Cloud&#xff0c;我们一步步把理念变成现实。 现在&#xff0c;数据库技…

如何保护客户数据并降低合规风险

如何保护客户数据并降低合规风险 保护客户数据和降低合规风险通常是金融行业企业&#xff08;从银行到投资公司&#xff0c;再到小型&#xff0c;中型和大型企业的财务部门&#xff09;最关心的问题。 当财务文件是以纸质形式出现时&#xff0c;这些担忧会成倍增加&#xff…

关于api的响应时间(curl)

最近遇到了需要在服务器上测试第三方api响应时间的需求。那么&#xff0c;怎么测呢&#xff1f; curl安排上。 curl -w "dnslookup: %{time_namelookup} | connect: %{time_connect} | appconnect: %{time_appconnect} | pretransfer: %{time_pretransfer} | starttrans…

3.5 讲一讲关于小红书的搜索引流技巧【玩赚小红书】

“有一大部分女生把小红书当百度使用”&#xff0c;一句话道出了小红书流量的核心。 今天&#xff0c;我更想和大家聊聊如何获取同样巨大的搜索流量&#xff0c;让源源不断的精准客户主动找上门来。可别忽视了这个流量入口&#xff0c;它占据总体流量的 50% 以上。 ​ ​ 布局…

2022卡塔尔世界杯引爆全球,跨境电商如何做好选品和营销?

2022卡塔尔世界杯正如火如荼的举办着&#xff0c;热度席卷全球。足球皇帝Franz Beckenbauer曾说&#xff1a;“在绿茵场上滚动的不是足球&#xff0c;而是黄金。”从商业价值论&#xff0c;世界杯的品牌价值世界第一&#xff0c;是奥运会的8倍。据Nox聚星了解&#xff0c;2022年…

centos7.9安装postgresql12

目录 1.下载安装包 2.安装 首先登陆官方网站下载 PostgreSQL: Downloads 1.下载安装包 按照官方的命令安装&#xff1a; # 下载PGSQL的rpm包 sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm #…

基于STM32G431嵌入式学习笔记——六、串口中断实例(基于第12届蓝桥杯串口部分题目)

上一节我们初步了解了中断的配置、串口的调试以及中断处理子程序的定义&#xff0c;接下来我们就来学习一下具体如何去应用串口中断。 一、真题引入 1.功能概述 2.串口功能 二、环境配置 我们依旧以第四节完成的第12届蓝桥杯节选题为初始环境进行配置&#xff0c;复制出…

Linux|centos7 Prometheus的自动服务发现 一(文件发现机制)

前言&#xff1a; Prometheus作为一个监控神器&#xff0c;深受大家的喜爱&#xff0c;那么如何使用它是一个问题&#xff0c;如何用好它又是一个问题了。 本文以centos7操作系统下搭建的Prometheus server为例&#xff0c;讲解基于文件发现新的采集器。 一&#xff0c; Pr…

【FLASH存储器系列十二】Nand Flash芯片使用指导之二

目录 1.1 芯片指令集 1.2 READ PAGE&#xff08;00h–30h&#xff09; 1.3 READ PAGE CACHE SEQUENTIAL (31h) 1.4 READ PAGE CACHE RANDOM (00h-31h) 1.5 PROGRAM PAGE&#xff08;80h-10h&#xff09; 1.6 PROGRAM PAGE CACHE (80h-15h) 1.7 ERASE BLOCK (60h-D0h) 上…

pytorch深度学习实战lesson26

第二十六课 GoogLeNet 这节课学习Googlenet &#xff0c; 虽然 nin 现在几乎没有被使用&#xff0c;但是 Googlenet 还是在大量的被使用。在比如说 Google 内部当然是用的挺多的&#xff0c;在外面也是被经常使用。这个网络当时候出来的时候也是吓了大家一跳。 如上图所示&…

到底该怎么学python啊?

前言 大家都说找工作有金九银十&#xff0c;经过了金九银十之后&#xff0c;很多小伙伴都纷纷入职了各家企业&#xff0c;在各个企业中扮演者不同的角色&#xff0c;其中我接触最多的就是算法工程师和Python开发工程师&#xff0c;也跟其他企业的相关技术负责人交流过&#xf…

11月25日:tp框架中的架构,配置,路由,控制器

tp框架的主要内容 架构&#xff1a; https://static.kancloud.cn/manual/thinkphp5/118010 配置&#xff1a; 配置文件主要位置 可以使用Config::load()调用thinkphp中的静态方法&#xff0c;显示出config.php的主要内容 路由&#xff1a; 图中可见 使用url::调用静态方法…

Spring Boot集成Easypoi导出Excel

目录 1.引入Maven依赖 2.实体类属性加上Excel注解 3.导出示例 4.导出结果 5.注解Excel说明 1.引入Maven依赖 <!--easypoi依赖&#xff08;表格导入导出&#xff09;--> <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-sp…

【愚公系列】2022年11月 数据库-数据库文档生成工具SmartSQL使用

文章目录前言一、数据库文档生成工具SmartSQL使用1.SmartSQL的功能介绍2.运行3.连接数据库4.分组管理5.数据表相关功能6.导入导出7.文档截图7.1 CHM文档7.2 MD文档ABTABAC_MAPPING 7.3 EXCEL文档7.4 PDF文档7.5 HTML文档7.6 XML文档7.7 JSON文档前言 SmartSQL 是一款方便、快捷…

Photographic Tone Reproduction for Digital Images

Abstract 经典的摄影任务是将现实世界亮度的潜在高动态范围映射到摄影印刷品的低动态范围。将数字图像映射到低动态范围的打印或屏幕的计算机图形从业者也面临着这种音调再现问题。本文介绍的工作利用了经过时间考验的摄影实践技术来开发新的色调再现算子。特别是&#xff0c;…

进程的调度

目录 1. 进程的概念 2.进程是如何被调度的 2.1描述 2.2 组织 2.3 PCB中描述的进程特征 2.4 进程调度的相关属性&#xff08;接2.3&#xff09; 3. 内存管理 1. 进程的概念 一个跑起来的程序就称之为进程(没跑起来就不是进程) 进程是操作系统分配资源的基本单位。 2.进程…