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

贪心算法总结(3)

一、最长回文串

409. 最长回文串 - 力扣(LeetCode)

class Solution {
public:int longestPalindrome(string s) {int hash[127]={0};for(char&ch:s) ++hash[ch];int ret=0;for(int&x:hash)  ret+=x/2*2; //技巧1 利用向下取整return ret<s.size()?ret+1:ret;}
};

二、增减字符串匹配

942. 增减字符串匹配 - 力扣(LeetCode)

class Solution {
public:vector<int> diStringMatch(string s) {//如果是升 就把最小的放进去  如果是降 就把最大的放进去int left=0,right=s.size();vector<int> ret;ret.reserve(s.size()+1);for(auto&ch:s) if(ch=='I') ret.emplace_back(left++);else ret.emplace_back(right--);ret.emplace_back(left);return ret;}
};

三、重构字符串

767. 重构字符串 - 力扣(LeetCode)

class Solution {
public:string reorganizeString(string s) {int hash[26]={0};int n=s.size(),maxcount=0,maxchar=' ';for(auto&ch:s)if(maxcount<++hash[ch-'a']) maxcount=hash[ch-'a'],maxchar=ch;//先处理最多的那个if(maxcount>(n+1)/2) return "";string ret(n,' ');int index=0;for(int i=0;i<maxcount;++i){ret[index]=maxchar;index+=2;}hash[maxchar-'a']=0;for(int i=0;i<26;++i)for(int j=0;j<hash[i];++j){if(index>=n) index=1;ret[index]='a'+i;index+=2;}return ret;}
};

四、最优除法

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;}
};

 五、单调递增的数字

738. 单调递增的数字 - 力扣(LeetCode)

class Solution {
public:
//要获取一个数的数位关系的时候 一般有两个技巧,第一个是变成字符串 第二个就是/10 %10int monotoneIncreasingDigits(int n) {//根据贪心策略,首先第一步我们要找到第一个下降的数,然后让他-1 之后再把后面所有的数都变成9//但是比如12345555123这种情况。就需要进行回退 回退到第一个5的位置然后再进行上面的操作string s=to_string(n);int m=s.size(),i=0;while(i+1<n&&s[i]<=s[i+1]) ++i; //找到第一个下降趋势的if(i==m-1) return n;//可能直接走到头了//如果没有走到头,开始回退while(i-1>=0&&s[i]==s[i-1]) --i;--s[i];//然后让后面的位置变成9for(int j=i+1;j<m;++j) s[j]='9';return stoi(s);}
};

六、坏了的计算机

991. 坏了的计算器 - 力扣(LeetCode)

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

七、整数替换

397. 整数替换 - 力扣(LeetCode)

 解法1:递归+记忆化搜索

class Solution {
public:unordered_map<int,int> hash;int integerReplacement(int n) {return dfs(n);}int dfs(long n) //细节问题 容易溢出{//模拟 递归 记忆化搜索 if(hash.count(n)) return hash[n];if(n==1) return hash[1]=0;else if(n%2)  return hash[n]=1+min(dfs(n-1),dfs(n+1));else  return hash[n]=dfs(n/2)+1;}
};

解法2:贪心

class Solution {
public:int integerReplacement(int n) {int ret=0;while(n>1){if(n%2==0) n/=2,++ret;else{if(n==3) n=1;else if(n%4==1)  n/=2;else n=n/2+1;ret+=2;}}return ret;}
};

八、可被三数整除的最大和

1262. 可被三整除的最大和 - 力扣(LeetCode)

class Solution {
public:int maxSumDivThree(vector<int>& nums) {// 正难则反//sum%3==0  //sum%3==1     x1  或者y1y2//sum%3==2     x1x2或者y1const int INF=0x3f3f3f3f;int sum=0,x1=INF,x2=INF,y1=INF,y2=INF;for(auto&e:nums){sum+=e;if(e%3==1) {if(e<x1) x2=x1,x1=e;else if(e<x2) x2=e;}else if(e%3==2){if(e<y1) y2=y1,y1=e;else if(e<y2) y2=e;}}if(sum%3==0) return sum;else if(sum%3==1) return max(sum-x1,sum-y1-y2);else return max(sum-x1-x2,sum-y1);}
};

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 设计模式的概念及必要性
  • Synchronized 的底层原理——Java全栈知识(40)
  • Flink SQL 基础操作
  • 注解Spring @AliasFor使用笔记
  • 知识点——样本间独立性,传统表征学习,显式物理连接,隐含交互,噪声,类相关类无关
  • 从零开始的CPP(37)跳跃游戏,动态规划,贪心算法
  • 纷享销客CRM AI产品架构概览、产品特色
  • Github 2024-08-09 开源项目日报 Top10
  • git的一些操作指令
  • 工作随记:oracle中偶发遇到存储过程编辑,删除等卡死问题
  • 下一代 AI 搜索引擎 MindSearch:多智能体 + 系统2,模拟人类认知过程的 AI 搜索引擎
  • 在Ubuntu 18.04上安装和配置pgAdmin 4服务器模式的方法
  • Docker最佳实践(六):安装Nacos
  • 9.动态导航栏怎么做
  • uniapp微信小程序 canvas绘制圆形半透明阴影 createCircularGradient函数不支持透明度部分解决方案
  • Angular 响应式表单 基础例子
  • Angularjs之国际化
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • chrome扩展demo1-小时钟
  • idea + plantuml 画流程图
  • java第三方包学习之lombok
  • Java基本数据类型之Number
  • js递归,无限分级树形折叠菜单
  • MaxCompute访问TableStore(OTS) 数据
  • maya建模与骨骼动画快速实现人工鱼
  • SpiderData 2019年2月13日 DApp数据排行榜
  • ubuntu 下nginx安装 并支持https协议
  • vuex 学习笔记 01
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 从0到1:PostCSS 插件开发最佳实践
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 我有几个粽子,和一个故事
  • 字符串匹配基础上
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​力扣解法汇总946-验证栈序列
  • ​探讨元宇宙和VR虚拟现实之间的区别​
  • # 消息中间件 RocketMQ 高级功能和源码分析(七)
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • ()、[]、{}、(())、[[]]命令替换
  • (1)(1.9) MSP (version 4.2)
  • (2015)JS ES6 必知的十个 特性
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (三十)Flask之wtforms库【剖析源码上篇】
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (十二)Flink Table API
  • (十七)Flink 容错机制
  • (转)为C# Windows服务添加安装程序
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .form文件_一篇文章学会文件上传