[算法训练营] 贪心算法专题(二)

🕺作者: 主页

我的专栏
C语言从0到1
探秘C++
数据结构从0到1
探秘Linux
菜鸟刷题集

😘欢迎关注:👍点赞🙌收藏✍️留言

🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的很重要,有问题可在评论区提出,感谢阅读!!!

文章目录

    • 前言
    • 376. 摆动序列
      • 解题思路
      • AC代码
    • 53. 最大子数组和
      • 解题思路
      • AC代码
    • 55. 跳跃游戏
      • 解题思路
      • AC代码
    • 45 跳跃游戏2
      • 解题思路
      • AC代码
    • 134. 加油站
      • 解题思路
      • AC代码

前言

本篇为贪心算法专题,总共5道题目,记录我的解题思路和一些感悟,供大家参考~

376. 摆动序列

链接:376. 摆动序列

解题思路

  • 主要的思路是处理平坡,也就是都是一样的值的情况
  1. 怎么找到峰值?左边比当前节点小,右边比当前节点小,或者反过来

  2. 如果只有两个值怎么办呢?我们需要为他先创建一个值放在左边,它和第一个值相同即可,这样就不会影响结果。

  3. 平坡是峰值:也就是说峰值是连续一样的值,此时只能记录一个峰值

@代码随想录

AC代码

class Solution {
public:int wiggleMaxLength(vector<int>& nums) {if(nums.size()<=1)return nums.size();int curGap=0;//后一个节点和当前节点的差值int preGap=0;//当前节点和前一个节点的差值int result=1;for(int i=0;i<nums.size()-1;++i){curGap = nums[i+1] - nums[i];if((preGap>=0&&curGap<0)||(preGap<=0&&curGap>0)){//判断峰值的条件 result++;preGap = curGap;//只在波动的时候更新前一个差值}}return result;}
};

53. 最大子数组和

链接:53. 最大子数组和

解题思路

下面是四种实现方法,这次只讲贪心怎么实现

  1. 题目要求是最长子数组和,所以就要连续还要找最大的

  2. 我们可以这样,先用最小整数作为结果的初始值

  3. 然后,用另一个值count来加

  4. 如果比res大,就更新res

  5. 当这个值为负数时说明这个情况可以舍弃了,从+1的位置继续,同时更新count

AC代码

class Solution {
public://贪心int maxSubArray(vector<int>& nums) {int res=INT_MIN;int count=0;for(int i=0;i<nums.size();++i){count+=nums[i];if(count>res)res=count;if(count<=0)count=0;}return res;}//滑动窗口// int maxSubArray(vector<int>& nums) {//     int left = 0, right = 0;//     int windowSum = 0, maxSum = INT_MIN;//     while(right < nums.size()){//         // 扩大窗口并更新窗口内的元素和//         windowSum += nums[right];//         right++;//         // 更新答案//         maxSum = windowSum > maxSum ? windowSum : maxSum;//         // 判断窗口是否要收缩//         while(windowSum < 0) {//             // 缩小窗口并更新窗口内的元素和//             windowSum -=  nums[left];//             left++;//         }//     }//     return maxSum;// }//动态规划// int maxSubArray(vector<int>& nums)// {//     int n=nums.size();//     if(n==0)return 0;//     vector<int> dp(n);//     dp[0]=nums[0];//     for(int i=1;i<n;++i)//     {//         dp[i]=max(nums[i],nums[i]+dp[i-1]);//     }//     int ret=INT_MIN;//     for(int j=0;j<n;++j)//     {//         ret=max(ret,dp[j]);//     }//     return ret;// }// int maxSubArray(vector<int>& nums)// {//     int n=nums.size();//     if(n==0)return 0;//     int dp_0=nums[0];//     int dp_1=0,ret=dp_0;//     for(int i=1;i<n;++i)//     {//         dp_1=max(nums[i],nums[i]+dp_0);//         dp_0=dp_1;//         ret=max(ret,dp_1);//     }//     return ret;// }//前缀和// int maxSubArray(vector<int>& nums)// {//     int n=nums.size();//     vector <int> presum(n+1);//     presum[0]=0;//     for(int i=1;i<=n;++i)//     {//         presum[i]=presum[i-1]+nums[i-1];//     }//     int minval=INT_MAX;//     int ret=INT_MIN;//     for(int j=0;j<n;++j)//     {   //         minval=min(minval,presum[j]);//         ret=max(ret,presum[j+1]-minval);//     }//     return ret;// }
};

55. 跳跃游戏

链接:55. 跳跃游戏

在这里插入图片描述

解题思路

  • 题目的意思是 从当前位置能否到达最后一个位置 可以超过 但是不能小于

  • 所以可以理解为是在一个位置上它的覆盖范围包含了最后一个位置就算是true

  • 所以只要不断更新新位置范围 到最后找到是否大于最后一个位置的坐标即可

AC代码

class Solution {
public:bool canJump(vector<int>& nums) {if(nums.size() == 1) return true;int cover = 0;for(int i = 0;i <= cover;++i){cover = max(cover,i+nums[i]);if(cover >= nums.size()-1)return true;}return false;}
};

45 跳跃游戏2

链接:45 跳跃游戏2

在这里插入图片描述

解题思路

  • 和前面的"跳跃游戏"一样 它也要覆盖最后一个点 不同在于本题要求的是次数 也就是要第几次跳跃才能覆盖最后一个点

  • 当移动下标移动到覆盖范围的最大值还没有覆盖到最后一个点 此时的jmp就要+1

  • 值得注意的是题目说了 生成的测试用例可以到达 nums[n - 1] 就不用考虑其他情况了

AC代码

class Solution {
public:int jump(vector<int>& nums) {if(nums.size()==1)return 0;int curmax=0,nextmax=0,jum=0;;for(int i=0;i<nums.size();++i){nextmax = max(nextmax,nums[i]+i);if(i==curmax){curmax = nextmax;jum++;if(curmax >= nums.size()-1)break;}} return jum;}
};

134. 加油站

链接:134. 加油站

在这里插入图片描述

解题思路

参考代码随想录

我的感觉:

  • 贪心的题目没有一种具体的模板,有的只是一种类似技巧性的思想,一般都不会这么想,可能是我写贪心写的太少了,”局部最优推出全局最优“这种思路还不够清晰,继续加油吧

AC代码

class Solution {
public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {  int curSum=0;int totalSum=0;int start=0;for(int i=0;i<gas.size();++i){ curSum += gas[i] - cost[i];totalSum += gas[i] - cost[i];if(curSum < 0){//当前累加rest[i]和curSum一旦小于0start = i + 1; //起始位置更新为i+1curSum = 0;//curSum从0开始}}if(totalSum < 0)return -1;//说明怎么走都不可能跑一圈了return start;}
};

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Day02_《MySQL索引与性能优化》

文章目录 一、SQL执行顺序二、索引简介1、关于索引2、索引的类型Btree 索引Btree 索引 三、Explain简介四、Explain 详解1、id2、select_type3、table4、type5、possible_keys6、key7、key_len8、ref9、rows10、Extra11、小案例 五、索引优化1、单表索引优化2、两表索引优化3、…

RT-DETR算法优化改进:一种新颖的动态稀疏注意力(BiLevelRoutingAttention) | CVPR2023

💡💡💡本文独家改进: 提出了一种新颖的动态稀疏注意力(BiLevelRoutingAttention),以实现更灵活的计算分配和内容感知,使其具备动态的查询感知稀疏性 1)代替RepC3进行使用; 2)BiLevelRoutingAttention直接作为注意力进行使用; 推荐指数:五星 RT-DETR魔术师专栏介…

leetcode刷题日记:118.Pascal‘s Triangle(杨辉三角)

118.Pascal’s Triangle(杨辉三角&#xff09; 题目给我们一个整数numRows表示杨辉三角形的行数&#xff0c;返回杨辉三角形的前numRows行&#xff0c;下面给出一个杨辉三角形看看它有哪些规律&#xff1b; 可以看出杨辉三角形的每一行的最左侧和最右侧的值都为1. 其余的第…

Marin说PCB之 PCB封装和原理图封装的藕断丝连

最近天气开始降温了&#xff0c;小编我不得不拿出珍藏多年的秋裤穿上了&#xff0c;就是走路不太方便&#xff0c;有点紧啊&#xff0c;可能是当时衣服尺码买小了吧&#xff0c;不可能是我吃胖了&#xff0c;这个绝对不可能。 话说小编我今年属实有点走霉运啊&#xff0c;下班和…

虚拟仪器软件结构VISA

1、什么是VISA VISA是虚拟仪器软件结构(Virtual Instrument Software Architectuere)的简称&#xff0c;是由VXI plug & play系统联盟所统一制定的I/O接口软件标准及其相关规范的总称。一般称这个I/O函数库为VISA库&#xff08;用于仪器编程的标准I/O函数库&#xff09;。…

Allegro层叠中的Etch Factor-铜皮的腐蚀因子如何计算

Allegro层叠中的Etch Factor-铜皮的腐蚀因子如何计算 在用Allegro进行PCB设计的时候,Cross-section中需要填入对应的信息,一般填入每层的厚度即可,如下图 当PCB需要进行仿真分析的时候,Etch-Factor这个值是必须要填写的,如下图 目前看到的都是90这个值,这是一个理论值。 …

app软件开发多少钱?功能会影响价格吗?

随着智能手机的普及&#xff0c;app开发市场日益繁荣&#xff0c;很多人都有开发app的梦想&#xff0c;但开发一款app需要多少钱呢?功能是否会影响价格?本文将为你揭开这个谜团。 一、app开发费用的影响因素 app开发费用受到多种因素的影响&#xff0c;例如开发难度、功能复…

Mysql Explain工具介绍

使用EXPLAIN关键字可以模拟优化器执行SQL语句&#xff0c;分析查询语句或是结构的性能瓶颈。 准备表 -- 课程表 CREATE TABLE class (id int(11) NOT NULL,name varchar(45) DEFAULT NULL,update_time datetime DEFAULT NULL,PRIMARY KEY (id)) ENGINEInnoDB DEFAULT CHARSET…

通过流量分析查看业务系统运行和访问情况

在当今数字化时代&#xff0c;应用程序的运行和访问情况对于企业和组织来说至关重要。无论是在线销售平台、移动应用还是企业内部系统&#xff0c;应用的性能和可用性直接影响着用户体验、业务流程以及组织效率。因此&#xff0c;对应用的运行和访问情况进行全面分析和评估&…

【01】Istio-1.17 部署

1.1 部署Istio控制平面 部署方法 istioctl istio的专用管理工具&#xff0c;支持定制控制平面和数据平面通过命令行的选项支持完整的IstioOperator API命令行各选项可用于单独设置&#xff0c;以及接收包含IstioOperator自定义资源(CR)的yaml文件 Istio Operator Istio相关的自…

MSSQL 配置ORACLE ​链接服务器

在有些场景&#xff0c;我们需要整合其他异构数据库的数据。我们可以使用代码去读取&#xff0c;经过处理后&#xff0c;再将数据保存到MSSQL数据库中。如果数据量比较大&#xff0c;但处理的逻辑并不复杂的情况下&#xff0c;这种方式就不是最好的办法。这时可以使用使用链接服…

笔尖笔帽检测1:笔尖笔帽检测数据集(含下载链接)

笔尖笔帽检测1&#xff1a;笔尖笔帽检测数据集(含下载链接) 目录 笔尖笔帽检测1&#xff1a;笔尖笔帽检测数据集(含下载链接) 1. 前言 2. 手笔检测数据集 &#xff08;1&#xff09;Hand-voc1 &#xff08;2&#xff09;Hand-voc2 &#xff08;3&#xff09;Hand-voc3 …

RT-DETR算法优化改进:Backbone改进 | HGBlock完美结合PPHGNetV2 RepConv

💡💡💡本文独家改进: PPHGNetV2助力RT-DETRHGBlock与PPHGNetV2 RepConv完美结合 推荐指数:五星 HGBlock_PPHGNetV2 | 亲测在多个数据集能够实现涨点 RT-DETR魔术师专栏介绍: https://blog.csdn.net/m0_63774211/category_12497375.html ✨✨✨魔改创新RT-DETR…

Windows 10 下使用Visual Studio 2017 编译CEF SDK

1.下载CEF SDK 由于需要跑在32位的机器&#xff0c;所以选择下载32位的SDKCEF Automated Builds 选择 Current Stable Build (Preferred) &#xff0c;这是当前稳定版本&#xff0c;CEF版本118 下载成功解压 2.下载编译工具 CMake 下载地址&#xff1a;CMake 配置CMake指向…

前后端交互案例,图书管理系统

先引入前端代码运行看看是否有问题 图书管理系统 定义前后端交互接口 1.登录 URL : /user/login 参数 : userName?&password? 响应 : true/false 2.图书列表展示 : URL : /book/getBookList 参数 : 无 响应 : List<BookInfo> 后端代码如下: package com…

Verilog基础:三段式状态机与输出寄存

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html 对于Verilog HDL而言&#xff0c;有限状态机(FSM)是一种重要而强大的模块&#xff0c;常见的有限状态机书写方式可以分为一段式&#xff0c;二段式和三段式&#xff0c;笔者强烈建议使用三…

【Docker】深入理解Docker:一种革新性的容器技术

前言 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 &#x1f4d5;作者简介&#xff1a;热…

基于servlet+jsp+mysql网上书店系统

基于servletjspmysql网上书店系统 一、系统介绍二、功能展示四、其它1.其他系统实现五.获取源码 一、系统介绍 项目类型&#xff1a;Java web项目 项目名称&#xff1a;基于servletjspmysql网上书店系统 项目架构&#xff1a;B/S架构 开发语言&#xff1a;Java语言 前端技…

二叉树题目:二叉树最大宽度

文章目录 题目标题和出处难度题目描述要求示例数据范围 前言解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;二叉树最大宽度 出处&#xff1a;662. 二叉树最大宽度 难度 5 级 题目描述 要求 给定一个二叉树的根结点 …

完全免费!超好用的IDEA插件推荐:Apipost-Helper

Idea 是一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它可以帮助开发人员更加高效地编写、调试和部署软件应用程序,Idea 还具有许多插件和扩展&#xff0c;可以根据开发人员的需要进行定制和扩展&#xff0c;从而提高开发效率,今天我们就来介绍一款国产的…