leetcode贪心算法题总结(二)

news2024/12/23 12:41:39

本节目录

  • 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->+1
        int ret = 0;
        while(target>startValue)
        {
            if(target%2 == 0) target/=2;
            else target += 1;
            ret++;
        }
        return ret+startValue-target;
    }
};

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

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

相关文章

SimpleCG小游戏开发系列(2)--贪吃蛇

一、前言 在之前的C语言小游戏开发系列我们已经介绍了扫雷游戏的开发&#xff0c;本篇我们继续此系列第二篇&#xff0c;同样是比较简单但好玩的一个游戏--贪吃蛇。因为有了之前的游戏框架&#xff0c;我们只需要直接搬来原来的框架即可&#xff0c;可以省去不少活。 先看看游…

命令行创建Vue项目

Vue项目创建 1. 打开UI界面 在命令行中&#xff0c;执行如下指令&#xff1a; vue ui 2. 打开项目管理器 3. 创建项目 创建项目的过程&#xff0c;需要联网进行&#xff0c;这可能会耗时比较长的时间&#xff0c;请耐心等待。 windows的命令行&#xff0c;容易卡顿&#xff0c…

使用Node Exporter采集主机数据

安装 Node Exporter 在 Prometheus 的架构设计中&#xff0c;Prometheus Server 并不直接服务监控特定的目标&#xff0c;其主要任务负责数据的收集&#xff0c;存储并且对外提供数据查询支持。因此为了能够能够监控到某些东西&#xff0c;如主机的 CPU 使用率&#xff0c;我们…

3D 渲染如何帮助电商促进销售?

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 3D 渲染图像因其高转化率而成为亚马逊卖家的最新趋势。它是电子商务平…

Linux 线程安全 (1)

文章目录 线程互斥概念互斥实际使用互斥锁的原理死锁问题说明 线程互斥概念 执行流 执行流是指操作系统对进程或线程的调度和执行顺序。它决定了程序中的指令按照何种顺序被执行。 现阶段可以粗浅的理解为&#xff0c;执行流决定执行哪个线程或进程的代码(或者说执行流决定了…

MyBatis标签及其应用示例

MyBatis标签及其应用示例 1. select 1.1 标签属性 id唯一的标识符parameterType传给此语句的参数的全路径名或别名如&#xff1a;com.xxx.xxx.demo.entity.User或userresultType语句返回值类型或别名。如果是集合List&#xff0c;此处填写集合的泛型T&#xff0c;而不是集合…

人机交互中信息数量与质量

在人机交互中&#xff0c;信息的数量和质量都是非常重要的因素。 信息的数量指的是交互过程中传递的信息的多少。信息的数量直接影响到交互的效率和效果&#xff0c;如果交互中传递的信息量太少&#xff0c;可能导致交互过程中的信息不足&#xff0c;用户无法得到想要的结果或者…

js实时监听input输入框值的变化

实习日记之通过调用common chemistry的api接口实现输入keyword查找cas号和mw。做了一个简单的html网页&#xff0c;用到了ajax技术。比较简单&#xff0c;适合刚入门的宝学习参考。代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head>&l…

面试算法78:合并排序链表

题目 输入k个排序的链表&#xff0c;请将它们合并成一个排序的链表。 分析&#xff1a;利用最小堆选取值最小的节点 用k个指针分别指向这k个链表的头节点&#xff0c;每次从这k个节点中选取值最小的节点。然后将指向值最小的节点的指针向后移动一步&#xff0c;再比较k个指…

cleanmymac这个软件怎么样?值不值得下载

cleanmymac是我必装的mac端清理软件&#xff0c;界面简洁好看&#xff0c;完美适配mac系统&#xff0c;文件清理的速度、精度都比较优秀&#xff0c;还是比较不错的呢。cleanmymac作为一款第三方清洁应用程序&#xff0c;具有专业完整的清理功能&#xff0c;包括释放内存、一键…

Halcon阈值处理的几种分割方法threshold/auto_threshold/binary_threshold/dyn_threshold

Halcon阈值处理的几种分割方法 文章目录 Halcon阈值处理的几种分割方法1. 全局阈值2. 基于直方图的自动阈值分割方法3. 自动全局阈值分割方法4. 局部阈值分割方法5. var_threshold算子6 . char_threshold 算子7. dual_threshold算子 在场景中选择物体或特征是图像测量或识别的重…

FairyGUI-Cocos Creator官方Demo源码解读

博主在学习Cocos Creator的时候&#xff0c;发现了一款免费的UI编辑器FairyGUI。这款编辑器的能力十分强大&#xff0c;但是网上的学习资源比较少&#xff0c;坑比较多&#xff0c;主要学习方式就是阅读官方文档和练习官方Demo。这里博主进行官方Demo的解读。 从gitee上克隆项目…

《PCI Express体系结构导读》随记 —— 第I篇 第1章 PCI总线的基本知识(15)

接前一篇文章&#xff1a;《PCI Express体系结构导读》随记 —— 第I篇 第1章 PCI总线的基本知识&#xff08;14&#xff09; 1.3 PCI总线的存储器读写总线事务 1.3.4 PCI读写主存储器 前文已提到&#xff0c;由于本节内容较长&#xff0c;因此将后一部分内容放在本文中。 为…

基于Python、Keras和OpenCV的实时人脸活体检测

你在互联网上找到的大多数人脸识别算法和研究论文都遭受照片攻击。这些方法在检测和识别来自网络摄像头的图像、视频和视频流中的人脸方面非常有效。然而&#xff0c;他们无法区分现实生活中的面孔和照片上的面孔。这种无法识别人脸的现象是由于这些算法在二维帧上工作。 现在…

【JS笔记】JavaScript语法 《基础+重点》 知识内容,快速上手(二)

数组 什么是数组&#xff1f; 字面理解就是 数字的组合 其实不太准确&#xff0c;准确的来说数组是一个 数据的集合 也就是我们把一些数据放在一个盒子里面&#xff0c;按照顺序排好 [1, 2, 3, hello, true, false]这个东西就是一个数组&#xff0c;存储着一些数据的集合 …

深度学习框架Keras与Pytorch对比

对于许多科学家、工程师和开发人员来说&#xff0c;TensorFlow是他们的第一个深度学习框架。TensorFlow 1.0于2017年2月发布&#xff0c;可以说&#xff0c;它对用户不太友好。 在过去的几年里&#xff0c;两个主要的深度学习库Keras和Pytorch获得了大量关注&#xff0c;主要是…

【Java EE初阶五】wait及notify关键字

1. wait和notify的概念 所谓的wait和notify其实就是等待、通知机制&#xff1b;该机制的作用域join类似&#xff1b;由于多个线程之间是随机调度的&#xff0c;引入wait和notify就是为了能够从应用层面上&#xff0c;干预到多个不同线程代码的执行顺序&#xff0c;此处的干预&a…

C# WPF上位机开发(Web API联调)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 很多时候&#xff0c;客户需要开发的不仅仅是一个上位机系统&#xff0c;它还有其他很多配套的系统或设备&#xff0c;比如物流小车、立库、数字孪…

web前端开发html/css求职简介/个人简介小白网页设计

效果图展示&#xff1a; html界面展示&#xff1a; html/css代码&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.…

Java IDEA JUnit 单元测试

JUnit是一个开源的 Java 单元测试框架&#xff0c;它使得组织和运行测试代码变得非常简单&#xff0c;利用JUnit可以轻松地编写和执行单元测试&#xff0c;并且可以清楚地看到哪些测试成功&#xff0c;哪些失败 JUnit 还提供了生成测试报告的功能&#xff0c;报告不仅包含测试…