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

贪心算法专题(Part2)

目录

1. 最优除法

2. 加油站

3. 坏了的计算器

4. 可被三整除的最大和

5. 单调递增的数字

6. 合并区间

7. 无重叠区间

8. 用最少数量的箭引爆气球


1. 最优除法

题目链接:553. 最优除法 - 力扣(LeetCode)

题目展示:

题目分析:

代码实现:

class Solution {
public:string optimalDivision(vector<int>& nums) {int n=nums.size();if(n==1) return to_string(nums[0]);if(n==2) return to_string(nums[0])+"/"+to_string(nums[1]);string ret=to_string(nums[0])+"/("+to_string(nums[1]);for(int i=2;i<n;i++){ret+="/"+to_string(nums[i]);}ret+=")";return ret;}
};

2. 加油站

题目链接:134. 加油站 - 力扣(LeetCode)

题目展示:

题目分析:

代码实现:

class Solution {
public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {int n=gas.size();for(int i=0;i<n;i++)//依次枚举所有起点{int rest=0;//标记净收益int step=0;for(;step<n;step++){int index=(i+step)%n;rest=rest+gas[index]-cost[index];if(rest<0) break;}if(rest>=0) return i;i=i+step;}return -1;}
};

3. 坏了的计算器

题目链接:991. 坏了的计算器 - 力扣(LeetCode)

题目展示:

题目分析:

代码实现:

class Solution {
public:int brokenCalc(int startValue, int target) {int ret=0;while(target>startValue){if(target%2==0) target/=2;else target+=1;ret++;}return ret+startValue-target;}
};

4. 可被三整除的最大和

题目链接:1262. 可被三整除的最大和 - 力扣(LeetCode)

题目展示:

题目分析:

代码实现:

class Solution {
public:int maxSumDivThree(vector<int>& nums){const int INF=0x3f3f3f3f;int sum=0,x1=INF,x2=INF,y1=INF,y2=INF;for(auto x:nums){sum+=x;if(x%3==1){if(x<x1) x2=x1,x1=x;else if(x<x2) x2=x;}else if(x%3==2){if(x<y1) y2=y1,y1=x;else if(x<y2) y2=x;}} //分类讨论if(sum%3==0) return sum;else if(sum%3==1) return max(sum-x1,sum-y1-y2);else return max(sum-y1,sum-x1-x2);}
};

5. 单调递增的数字

题目链接:738. 单调递增的数字 - 力扣(LeetCode)

题目展示:

题目分析:

代码实现:

class Solution {
public:int monotoneIncreasingDigits(int n) {string s=to_string(n);//转化为字符串 int i=0;int m=s.size();//找到第一个递减的位置while(i+1<m&&s[i]<=s[i+1]) i++;if(i+1==m) return n;while(i-1>=0&&s[i]==s[i-1]) i--;s[i]--;for(int j=i+1;j<m;j++) s[j]='9';return stoi(s);}
};

6. 合并区间

题目链接:56. 合并区间 - 力扣(LeetCode)

题目展示:

题目分析:

代码实现:

class Solution {
public:vector<vector<int>> merge(vector<vector<int>>& intervals) {sort(intervals.begin(),intervals.end());//排序//合并区间int left=intervals[0][0];int right=intervals[0][1];vector<vector<int>> ret;for(int i=1;i<intervals.size();i++){int a=intervals[i][0];int b=intervals[i][1];//有重叠部分if(a<=right){right=max(right,b);//求并集}else{ret.push_back({left,right});left=a;right=b;}}ret.push_back({left,right});return ret;}
};

7. 无重叠区间

题目链接:435. 无重叠区间 - 力扣(LeetCode)

题目展示:

题目分析:

代码实现:

class Solution {
public:int eraseOverlapIntervals(vector<vector<int>>& intervals) {sort(intervals.begin(),intervals.end());int left=intervals[0][0];int right=intervals[0][1];int ret=0;for(int i=1;i<intervals.size();i++){int a=intervals[i][0];int b=intervals[i][1];if(a<right){ret++;right=min(b,right);}else{right=b;}}return ret;}
};

8. 用最少数量的箭引爆气球

题目链接:452. 用最少数量的箭引爆气球 - 力扣(LeetCode)

题目展示:

题目分析:

代码实现:

class Solution {
public:int findMinArrowShots(vector<vector<int>>& points) {sort(points.begin(),points.end());int right=points[0][1];int ret=1;for(int i=1;i<points.size();i++){int a=points[i][0];int b=points[i][1];if(a<=right){right=min(right,b);}else{ret++;right=b;}}return ret;}
};

http://www.xdnf.cn/news/5138.html

相关文章:

  • React Hooks 精要:从入门到精通的进阶之路
  • 单片机-STM32部分:10-2、逻辑分析仪
  • 【软件工程】基于频谱的缺陷定位
  • openlayers利用已知的三个经纬度的坐标点 , 绘制一个贝塞尔曲线
  • LeetCode 39 LeetCode 40 组合总和问题详解:回溯算法与剪枝优化(Java实现)
  • 鸿蒙 所有API缩略图鉴
  • PyTorch API 10 - benchmark、data、批处理、命名张量
  • 如何创建伪服务器,伪接口
  • AI预测3D新模型百十个定位预测+胆码预测+去和尾2025年5月10日第73弹
  • linux搭建hadoop学习
  • 测试左移系列-产品经理实战-实战认知1
  • 简易图片编辑工具,支持抠图和替换背景
  • 如何启动vue项目及vue语法组件化不同标签应对的作用说明
  • 使用互斥锁保护临界
  • “AI+城市治理”智能化解决方案
  • 前端面试每日三题 - Day 30
  • VScode密钥(公钥,私钥)实现免密登录【很细,很全,附带一些没免密登录成功的一些解决方法】
  • [Linux]多线程(二)原生线程库---pthread库的使用
  • 学习黑客5 分钟深入浅出理解Linux Common Directories
  • Spark MLlib网页长青
  • Python-函数
  • Git Github Tutorial
  • STL-list
  • 【生存技能】ubuntu 24.04 如何pip install
  • OSCP - Proving Grounds - EvilBox-One
  • 软考中级数据库备考-上午篇
  • 使用FastAPI和React以及MongoDB构建全栈Web应用01 概述
  • 养生:开启健康生活的密钥
  • 使用定时器监视当前PID 如果当前程序关闭 UI_Core.exe 也随之自动关闭实现方法
  • 用纯HTML和CSS仿写知乎登录页面