leetcode贪心算法题总结(二)

本节目录

  • 1.最长回文串
  • 2.增减字符串匹配
  • 3.分发饼干
  • 4.最优除法
  • 5.跳跃游戏II
  • 6.跳跃游戏
  • 7.加油站
  • 8.单调递增的数字
  • 9.坏了的计算器

1.最长回文串

最长回文串
在这里插入图片描述

class Solution {
public:int longestPalindrome(string s) {//计数一:用数组模拟哈希表int hash[127] = {0};for(auto x:s){hash[x]++;}//统计结果int ret = 0;for(auto x:hash){ret += x/2*2;}return ret<s.size()?ret+1:ret;}
};

2.增减字符串匹配

增减字符串匹配
在这里插入图片描述

class Solution {
public:vector<int> diStringMatch(string s) {//贪心//遇到I,选择当前能选择的最小的数//遇到D,选择当前能选择的最大的数int left = 0,right = s.size();vector<int> ret;for(auto ch:s){if(ch == 'I') ret.push_back(left++);else ret.push_back(right--);}ret.push_back(left);return ret;}
};

3.分发饼干

分发饼干
在这里插入图片描述

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

4.最优除法

最优除法
在这里插入图片描述

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 str = to_string(nums[0])+"/("+to_string(nums[1]);for(int i=2;i<n;i++){str+='/'+to_string(nums[i]);}str +=')';return str;}
};

5.跳跃游戏II

跳跃游戏II
在这里插入图片描述

class Solution {
public:int jump(vector<int>& nums) {//使用层序遍历的思想,一层一层往后跳//maxPos表示下一层最右端点的下标int left = 0,right = 0,maxPos = 0,ret = 0,n = nums.size();while(left<=right){if(maxPos>=n-1) return ret;//判断能否跳到最后一个位置//遍历当前层for(int i=left;i<=right;i++){maxPos = max(maxPos,nums[i]+i);}left = right+1;right = maxPos;ret++;}return -1;}
};

6.跳跃游戏

跳跃游戏
在这里插入图片描述

class Solution {
public:bool canJump(vector<int>& nums) {//跟上一题跳跃游戏II思路一模一样//一层一层往后跳,层序遍历int left = 0,right = 0,maxPos = 0,n =nums.size();while(left<=right){if(maxPos>=n-1) return true;for(int i=left;i<=right;i++){maxPos = max(maxPos,nums[i]+i);}left = right+1;right = maxPos;}return false;}
};

7.加油站

加油站
在这里插入图片描述

class Solution {
public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {//解法一:暴力枚举 O(n^2) 会超时int n = gas.size();int step = n;for(int i=0;i<n;i++){int rest = 0;for(int step=0;step<n;step++){int index = (i+step)%n;rest = rest+gas[index]-cost[index];if(rest<0) break;}if(rest>=0) return i;}return -1;}
};

在这里插入图片描述

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

8.单调递增的数字

单调递增的数字
在这里插入图片描述

class Solution {
public:int monotoneIncreasingDigits(int n) {//找规律string s = to_string(n);int i=0,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);}
};

9.坏了的计算器

坏了的计算器
在这里插入图片描述

class Solution {
public:int brokenCalc(int startValue, int target) {//正难则反+贪心//从end->begin *->/ -1->+1int ret = 0;while(target>startValue){if(target%2 == 0) target/=2;else target += 1;ret++;}return ret+startValue-target;}
};

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

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

相关文章

自定义拖拽表单的优势表现在哪里?

利用自定义拖拽表单&#xff0c;可以让办公更轻松&#xff0c;效率更高&#xff0c;是理想的提质增效办公工具。哪里有自定义拖拽表单&#xff1f;它又有什么样的优势特点&#xff1f;流辰信息是专业研发低代码技术平台的服务商&#xff0c;经验足、研发实力强、服务好&#xf…

2024年第三届服务机器人国际会议(ICoSR 2024) | Ei、Scopus双检索

会议简介 Brief Introduction 2024年第三届服务机器人国际会议(ICoSR 2024) 会议时间&#xff1a;2024年7月26日-28日 召开地点&#xff1a;中国杭州 大会官网&#xff1a;www.iwosr.org 进入新时代&#xff0c;科技更新迭代快速发展&#xff0c;机器人不仅变得更加节能&#x…

Python3 XML解析

Python3 XML解析 什么是XML&#xff1f; XML 指可扩展标记语言&#xff08;eXtensible Markup Language&#xff09;&#xff0c;标准通用标记语言的子集&#xff0c;是一种用于标记电子文件使其具有结构性的标记语言。 XML 被设计用来传输和存储数据。 XML是一套定义语义…

HarmonyOS page生命周期函数讲解

下面 我们又要看一个比较重要的点了 页面生命周期 页面组件有三个生命周期 onPageShow 页面显示时触发 onPageHide 页面隐藏时触发 onBackPress 页面返回时触发 这里 我们准备两个组件 首先是 index.ets 参考代码如下 import router from ohos.router Entry Component struc…

gFTP - 多线程 FTP 客户端工具

gFTP - 多线程 FTP 客户端工具 1. Download gFTP2. GUIReferences https://github.com/masneyb/gftp gFTP is a free and open-source multithreaded File Transfer Protocol client program. It is most used on Unix-like systems such as Linux, macOS, and Sony PlayStati…

FPGA设计时序约束十四、Set_External_Delay

一、序言 在时序约束中对clock的约束还存在一种特殊的延时约束set external delay。set external delay如字面含义&#xff0c;设置外部的时延值&#xff0c;但这个外部时延主要是指反馈时延&#xff0c;即信号从FPGA的output端口输出后经过外部电路回到输入端口的时延值。 二…

如何文件从电脑传到iPhone,这里提供几个方法

本文介绍了如何使用Finder应用程序、iTunes for Windows、iCloud和谷歌照片将照片从Mac或PC传输到iPhone。 如何将照片从Mac传输到iPhone 如果你有一台Mac电脑&#xff0c;里面装满了你想转移到iPhone的照片&#xff0c;这是一件非常简单的事情。只需遵循以下步骤&#xff1a…

AI大模型时代下运维开发探索第二篇:基于大模型(LLM)的数据仓库

在SREWorks社区聚集了很多进行运维数仓建设的同学&#xff0c;大家都会遇到类似的挑战和问题&#xff1a; 数仓中存储大量数据消耗成本&#xff0c;但很多存储的数据却并没有消费。进数仓的ETL学习成本高、管理成本高&#xff0c;相关同学配合度低&#xff0c;以及上游结构改动…

手写Spring与基本原理--简易版

文章目录 手写Spring与基本原理解析简介写一个简单的Bean加载容器定义一个抽象所有类的BeanDefinition定义一个工厂存储所有的类测试 实现Bean的注册定义和获取基于Cglib实现含构造函数的类实例化策略Bean对象注入属性和依赖Bean的功能Spring.xml解析和注册Bean对象实现应用上下…

数据结构--二叉搜索树的实现

目录 1.二叉搜索树的概念 2.二叉搜索树的操作 二叉搜索树的插入 中序遍历(常用于排序) 二叉搜索树的查找 二叉搜索树的删除 完整二叉树代码&#xff1a; 二叉搜索树的应用 key/value搜索模型整体代码 1.二叉搜索树的概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一…

写实风格3D模型材质贴图

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 写实3D模型的制作过程包括建模、材质贴图、灯光设置和渲染等步骤。首…

java spring boot 自定义 aop

以一个锁的加锁和释放为例 1、先定义注解 /*** 锁切面* author fmj*/ Retention(RetentionPolicy.RUNTIME) Target(ElementType.METHOD) public interface VersionLockAOP { }2、然后定义切面类以及切点 /*** 切面*/ Component Aspect Slf4j public class VersionLockAOPAspe…