leetcode贪心算法题总结(一)

此系列分三章来记录leetcode的有关贪心算法题解,题目我都会给出具体实现代码,如果看不懂的可以后台私信我。

本章目录

  • 1.柠檬水找零
  • 2.将数组和减半的最少操作次数
  • 3.最大数
  • 4.摆动序列
  • 5.最长递增子序列
  • 6.递增的三元子序列
  • 7.最长连续递增序列
  • 8.买卖股票的最佳时机
  • 9.买卖股票的最佳时机II
  • 10.K次取反后最大化的数组和
  • 11.按身高排序
  • 12.优势洗牌

1.柠檬水找零

柠檬水找零
在这里插入图片描述

class Solution {
public:bool lemonadeChange(vector<int>& bills) {int five = 0,ten = 0;for(auto x:bills){if(x==5) five++;else if(x==10){if(five == 0) return false;five--;ten++;}else{if(ten&&five) //贪心{ten--;five--;}else if(five>=3){five -= 3;}else return false;}}return true;}
};

2.将数组和减半的最少操作次数

将数组和减半的最少操作次数
在这里插入图片描述

class Solution {
public:int halveArray(vector<int>& nums) {//贪心+大根堆priority_queue<double> heap;double sum = 0.0;for(auto x:nums){sum += x;heap.push(x);}sum /= 2.0;int count =0;while(sum>0){auto t = heap.top()/2.0;heap.pop();sum -= t;count++;heap.push(t);}return count;}
};

3.最大数

最大数
在这里插入图片描述

class Solution {
public:string largestNumber(vector<int>& nums) {//优化:将整型都转成字符串,通过比较字符串的字典序来比大小vector<string> strs;for(auto x:nums) strs.push_back(to_string(x));sort(strs.begin(),strs.end(),[&](const string& s1,const string& s2){return s1+s2>s2+s1;});string ret;for(auto& s: strs) ret+=s;//处理前导零if(ret[0]=='0') return "0";return ret;}
};

4.摆动序列

摆动序列
在这里插入图片描述

class Solution {
public:int wiggleMaxLength(vector<int>& nums) {//贪心:找极值点,建议大家将nums画成折线图进行观察int n = nums.size();if(n<2) return n;int ret =0,left = 0;for(int i=0;i<n-1;i++){int right = nums[i+1]-nums[i];if(right == 0) continue;if(left*right<=0) ret++; //两边异号left = right;}return ret+1;//最后一个点必要}
};

5.最长递增子序列

最长递增子序列
在这里插入图片描述

class Solution {
public:int lengthOfLIS(vector<int>& nums) {//自己设计一个数组,此数组的每个元素表示存储长度为x的子序列的最后一个元素的最小值int n = nums.size();vector<int> ret;ret.push_back(nums[0]);for(int i=1;i<n;i++){if(nums[i]>ret.back()){ret.push_back(nums[i]);}else{int left = 0,right = ret.size()-1;while(left<right){int mid = (left+right)>>1;if(ret[mid]<nums[i]) left = mid+1;else right = mid;}ret[left] = nums[i];}}return ret.size();}
};

6.递增的三元子序列

递增的三元子序列
在这里插入图片描述

class Solution {
public:bool increasingTriplet(vector<int>& nums) {int a = nums[0],b = INT_MAX;for(int i=1;i<nums.size();i++){if(nums[i]>b) return true;if(nums[i]>a) b = nums[i];else a = nums[i];}return false;}
};

7.最长连续递增序列

最长连续递增序列
在这里插入图片描述

class Solution {
public:int findLengthOfLCIS(vector<int>& nums) {//贪心+双指针int ret = 0,n = nums.size();for(int i=0;i<n;){int j = i+1;while(j<n&& nums[j]>nums[j-1]) j++;ret = max(ret,j-i);i = j;//直接在循环中更新下一个起点的位置,体现了贪心}return ret;}
};

8.买卖股票的最佳时机

买卖股票的最佳时机
在这里插入图片描述

class Solution {
public:int maxProfit(vector<int>& prices) {int ret = 0,minElem = INT_MAX;int n = prices.size();for(int i=0;i<n;i++){ret = max(ret,prices[i]-minElem);//先更新结果minElem = min(minElem,prices[i]);//再更新最小值}return ret;}
};

9.买卖股票的最佳时机II

买卖股票的最佳时机II述
在这里插入图片描述

class Solution {
public:int maxProfit(vector<int>& prices) {//法一:双指针int ret = 0,n = prices.size();for(int i=0;i<n;i++){int j = i;while(j+1<n && prices[j+1]>prices[j]) j++;ret += prices[j]-prices[i];i = j;}return ret;}
};class Solution {
public:int maxProfit(vector<int>& prices) {//法二:一天一天进行计算int ret = 0,n = prices.size();for(int i=1;i<n;i++){if(prices[i]-prices[i-1]>0) ret += (prices[i]-prices[i-1]);}return ret;}
};

10.K次取反后最大化的数组和

K次取反后最大化的数组和
在这里插入图片描述

class Solution {
public:int largestSumAfterKNegations(vector<int>& nums, int k) {int m = 0,minElem = INT_MAX,n = nums.size();for(auto x:nums){if(x<0) m++;minElem = min(minElem,abs(x));}int ret = 0;if(m>k){sort(nums.begin(),nums.end());for(int i=0;i<k;i++){ret += -nums[i];}for(int i=k;i<n;i++){ret += nums[i];}}else{for(auto x:nums){ret += abs(x);}if((k-m)%2!=0){ret -= minElem*2;}}return ret;}
};

11.按身高排序

按身高排序
在这里插入图片描述

class Solution {
public:vector<string> sortPeople(vector<string>& names, vector<int>& heights) {//1.创建一个下标数组int n = names.size();vector<int> index(n);for(int i=0;i<n;i++) index[i] = i;//2.对下标数组进行排序sort(index.begin(),index.end(),[&](int i,int j){return heights[i]>heights[j];});//3.输出结果vector<string> ret;for(auto x:index){ret.push_back(names[x]);}return ret;}
};

12.优势洗牌

优势洗牌
在这里插入图片描述

class Solution {
public:vector<int> advantageCount(vector<int>& nums1, vector<int>& nums2) {//此题可以学习对应的策略,积累经验int n = nums1.size();//1.排序sort(nums1.begin(),nums1.end());vector<int> index2(n);for(int i=0;i<n;i++) index2[i] = i;sort(index2.begin(),index2.end(),[&](int i,int j){return nums2[i]<nums2[j];});//2.田忌赛马int left = 0,right = n-1;vector<int> ret(n);for(int i=0;i<n;i++){if(nums1[i]>nums2[index2[left]]) ret[index2[left++]] = nums1[i];else ret[index2[right--]] = nums1[i];}return ret;}
};

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

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

相关文章

事务管理解析:掌握Spring事务的必备技能!

AOP事务管理 1.1 Spring事务简介1.1.1 相关概念介绍1.1.2 转账案例-需求分析1.1.3 转账案例-环境搭建步骤1:准备数据库表步骤2:创建项目导入jar包步骤3:根据表创建模型类步骤4:创建Dao接口步骤5:创建Service接口和实现类步骤6:添加jdbc.properties文件步骤7:创建JdbcConfig配置…

八股文打卡day12——计算机网络(12)

面试题&#xff1a;HTTPS的工作原理&#xff1f;HTTPS是怎么建立连接的&#xff1f; 我的回答&#xff1a; 1.客户端向服务器发起请求&#xff0c;请求建立连接。 2.服务器收到请求之后&#xff0c;向客户端发送其SSL证书&#xff0c;这个证书包含服务器的公钥和一些其他信息…

机器学习之人工神经网络(Artificial Neural Networks,ANN)

人工神经网络(Artificial Neural Networks,ANN)是机器学习中的一种模型,灵感来源于人脑的神经网络结构。它由神经元(或称为节点)构成的层级结构组成,每个神经元接收输入并生成输出,这些输入和输出通过权重进行连接。 人工神经网络(ANN)是一种模仿生物神经系统构建的…

【操作系统】探究驱动奥秘:驱动程序设计的解密与实战

​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;Linux专栏&#xff1a;《探秘Linux | 操作系统解密》⏰诗赋清音&#xff1a;月悬苍穹泛清辉&#xff0c;梦随星河徜徉辉。情牵天际云千层&#xff0c;志立乘风意自飞。 目录 &…

数据库——LAMP的搭建及MySQL基操

1.实验内容及原理 1. 在 Windows 系统中安装 VMWare 虚拟机&#xff0c;在 VMWare 中安装 Ubuntu 系统,并在 Ubuntu 中搭建 LAMP 实验环境。 2. 使用 MySQL 进行一些基本操作&#xff1a; &#xff08;1&#xff09;登录 MySQL&#xff0c;在 MySQL 中创建用户&#xff0c;并对…

【正则表达式】

概述 正则表达式又称规则表达式。&#xff08;英语&#xff1a;Regular Expression&#xff0c;在代码中常简写为regex、regexp或RE&#xff09;&#xff0c;计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。正则表达式并不仅限于某一种语…

spss统计软件:BM SPSS Statistics 27 (Win/mac)激活版

IBM SPSS Statistics 27 是一款专为数据分析、统计建模、预测分析和决策支持而设计的软件工具。作为SPSS Statistics系列的一部分&#xff0c;这个版本进一步增强了数据分析的功能&#xff0c;改善了用户体验&#xff0c;并确保了软件的稳定性与兼容性。 主要特点包括&#xff…

Spring Boot+RocketMQ 实现多实例分布式环境下的事件驱动

为什么要使用MQ&#xff1f; 在Spring Boot Event这篇文章中已经通过Guava或者SpringBoot自身的Listener实现了事件驱动&#xff0c;已经做到了对业务的解耦。为什么还要用到MQ来进行业务解耦呢&#xff1f; 首先无论是通过Guava还是Spring Boot自身提供的监听注解来实现的事…

Flink on K8S生产集群使用StreamPark管理

&#xff08;一&#xff09;直接部署&#xff08;手动测试用&#xff0c;不推荐&#xff09; Flink on Native Kubernetes 目前支持 Application 模式和 Session 模式&#xff0c;两者对比 Application 模式部署规避了 Session 模式的资源隔离问题、以及客户端资源消耗问题&am…

使用 async-profiler 分析 CPU 和 内存使用情况

async-profiler 是非常主流的 Java Profiling 工具之一&#xff0c;且对 Linux 支持良好&#xff0c;适合分析运行在服务器上的 Java 应用程序在 CPU 和内存上的占用情况。本文介绍一下 async-profiler 的安装和使用方法。 1. 安装 wget https://github.com/jvm-profiling-too…

人工智能 机器学习 深度学习:概念,关系,及区别说明

如果过去几年&#xff0c;您读过科技主题的文章&#xff0c;您可能会遇到一些新词汇&#xff0c;如人工智能&#xff08;Artificial Intelligence&#xff09;、机器学习&#xff08;Machine Learning&#xff09;和深度学习&#xff08;Deep Learning&#xff09;等。这三个词…

Tuxera NTFS for Mac2024免费Mac读写软件下载教程

在日常生活中&#xff0c;我们使用Mac时经常会遇到外部设备不能正常使用的情况&#xff0c;如&#xff1a;U盘、硬盘、软盘等等一系列存储设备&#xff0c;而这些设备的格式大多为NTFS&#xff0c;Mac系统对NTFS格式分区存在一定的兼容性问题&#xff0c;不能正常读写。 那么什…

WPF+Halcon 培训项目实战(1-5):Halcon安装,图像处理,Halcon简单模板匹配

文章目录 前言相关链接项目专栏我个人对就业市场的评价Halcon安装实战1-4&#xff1a;Halcon基础实战5&#xff1a;模板匹配[形状匹配]实战代码 结尾 前言 为了更好地去学习WPFHalcon&#xff0c;我决定去报个班学一下。原因无非是想换个工作。相关的教学视频来源于下方的Up主…

案例189:基于微信小程序的高校教务管理系统设计与实现

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder …

Eclipse安装Jrebel eclipse免重启加载项目

每次修改JAVA文件都需要重新启动项目&#xff0c;加载时间太长&#xff0c;eclipse安装jrebel控件,避免重启项目节省时间。 1、Help->Eclipse Marketplace 2、搜索jrebel 3、Help->jrebel->Configuration 配置jrebel 4、激活jrebel 5、在红色框中填入 http://jrebel…

ajax请求——XMLHttpRequest请求

个人练习笔记-----Ajax01 一、GET <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</t…

嵌入式高薪岗位解析——单机片开发

很多人都问&#xff0c;什么专业适合做单机片开发呢 那么以下是一些可能适合从事单片机开发岗位的专业&#xff1a; 电子信息工程专业物联网工程专业嵌入式技术与应用专业应用电子技术专业软件技术专业自动化控制专业信息工程专业电气自动化等相关专业 此外&#xff0c;从事…

Windows/Linux环境登入mysql、mysqldump命令等多方式解决方案之简易记录

Windows/Linux环境登入mysql、mysqldump命令等多方式解决方案之简易记录 之前发布过Window方式,这次结合以上主题,完善下Linux相关登入方式过程,纯属做个记录,有需要的朋友可以做个学习参考。 一、Windows环境提示“‘mysql’ 不是内部或外部命令,也不是可运行的程序或批…

赏金猎人必学站点(梯外)

What to learn? Technical- Computer Fundamentals https://www.comptia.org/training/by-certification/a https://www.youtube.com/watch?vtIfRDPekybU https://www.tutorialspoint.com/computer_fundamentals/index.htm https://onlinecourses.swayam2.ac.in/cec19_cs…

Spring Cloud Gateway 常见过滤器的基本使用

目录 1. 过滤器的作用 2. Spring Cloud Gateway 过滤器的类型 2.1 内置过滤器 2.1.1 AddResponseHeader 2.1.2 AddRequestHeader 2.1.3 PrefixPath 2.1.4 RequestRateLimiter 2.1.5 Retry 2.2 自定义过滤器 1. 过滤器的作用 过滤器通常用于拦截、处理或修改数据流和事…