[C++] : 贪心算法专题(第一部分)

1.柠檬水找零:

在这里插入图片描述

1.思路一:

在这里插入图片描述

柠檬水找零

class Solution {
public:bool lemonadeChange(vector<int>& bills) {int file=0;int ten =0;for(auto num:bills){if(num == 5) file++;else if(num == 10){if(file > 0)file--,ten++;elsereturn false;}else{if(ten>=1 && file>=1)ten--,file--;else if(file>=3)file-=3;elsereturn false;}}return true;}
};

GIF题目解析

2. 将数组和减半的最小操作数:

在这里插入图片描述

1.思路一:

将数组和减半的最小操作数

在这里插入图片描述

class Solution {
public:int halveArray(vector<int>& nums) {//1.求和:long long sum = 0;for (auto num : nums){sum += num;}//2.计算一半的值:long double half = ((long double)sum) / 2;//3.记录操作数:int count = 0;priority_queue<double> qu(nums.begin(), nums.end());while (half>0)//等于或者小于都不满足循环条件{double tmp = qu.top();//获取堆顶数据qu.pop();//pop堆顶数据tmp /= 2;half -= tmp;count++;qu.push(tmp);}return count;}
};

GIF题目解析

3.最大数:

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

1.思路一:

在这里插入图片描述

class Solution {
public:string largestNumber(vector<int>& nums) {vector<string> strs;for(int num:nums){strs.push_back(to_string(num));}sort(strs.begin(),strs.end(),[](const string s1 , const string s2){return s1+s2 > s2+s1;});string ret;for(auto str:strs){ret+=str;}//下标访问字符串返回的是char&可读可写类型的数据!if(ret[0]=='0') return "0";return ret;}
};

GIF题目解析

4.摆动序列:

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

1.思路一:

在这里插入图片描述

class Solution {
public:int wiggleMaxLength(vector<int>& nums) {int ret = 0;int left = 0;int right = 0;for(int i = 0 ; i < nums.size() - 1  ; i++){right = nums[i+1] - nums[i];if(right == 0) continue;if(left*right <= 0) ret++; left = right;}//第一个点是没有加入进来的!return ret+1;}
};

GIF题目解析

5.最长递增子序列

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

1.思路一:dp方法

在这里插入图片描述

class Solution {
public:int lengthOfLIS(vector<int>& nums) {int n = nums.size();vector<int> dp(n,1);//1.开始遍历:int ret = 0;for(int i=1 ; i<n;i++){//1.计算从0到i-1的递增子序列for(int j=0;j<i;j++){if(nums[j] < nums[i]){//1.注意:dp[i] = max(dp[j]+1 , dp[i]); }}ret = max(dp[i] , ret);}return ret;}
};

GIF题目解析

请添加图片描述

2.思路二:在dp基础上进行的贪心优化:

在这里插入图片描述

class Solution {
public:int lengthOfLIS(vector<int>& nums) {//1.创建dp数组保存当前遍历到的位置的递增字序列元素vector<int> dp;//1-1:第一个数一定开始就在dp里面了!dp.push_back(nums[0]);int n = nums.size();//2.遍历顺序表:for(int cur=1 ; cur<n ; cur++){//1.比最后一个数都大直接push_back()if(nums[cur] > dp.back()) {dp.push_back(nums[cur]);}//2.二分寻找!else {int left = 0 , right = dp.size()-1;while(left < right){int mid = left + (right - left)/2;if(dp[mid] < nums[cur]) left = mid + 1;else right = mid; }//3.找到数据更新!dp[left] = nums[cur];}}return dp.size();}
};

GIF题目解析

请添加图片描述

6.递增的三元子序列

在这里插入图片描述

递增的三元子序列

1.思路一:

在这里插入图片描述

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

GIF题目解析

7.最长连续递增序列

在这里插入图片描述

最长连续递增序列

1.思路一:

在这里插入图片描述

class Solution {
public:int findLengthOfLCIS(vector<int>& nums) {int i=0;int ret = 0;while(i < nums.size()){int j = 0;for(j = i;j<nums.size()-1;j++){if(nums[j] >= nums[j+1]) break;}ret = max(ret , j-i+1);//贪心思路j的位置在连续递增子序列的最后一个位置!i = j+1;}return ret;}
};

GIF题目解析:

请添加图片描述

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

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

相关文章

Linux文件fd剖析

学习之前&#xff0c;首先要认识什么是文件&#xff1f; 空文件也是要在内存中占据空间的&#xff0c;因为它还有属性数据。文件 属性 内容文件操作 对内容 对属性 或者对内容和属性的操作标定一个文件的时候&#xff0c;必须使用&#xff1a;路径文件名&#xff0c;文件具…

Vue: 事件修饰符, 键盘事件, 鼠标事件,计算属性

目录 事件修饰符 阻止默认事件 阻止冒泡 允许触发一次 捕获模式 self passive 键盘事件 keyup & keydown 按键别名 注意tab 注意系统按键 自定义按键 鼠标事件 简介 鼠标焦点事件 计算属性 差值语法实现 methods实现 computed实现 get() set() 总…

Asp .Net Core 集成 FluentValidation 强类型验证规则库

文章目录 入门程序安装案例&#xff1a;登录 验证器内置验证器自定义验证器编写自定义验证器可重复使用的属性验证器 本地化DI自动验证 官网&#xff1a;https://docs.fluentvalidation.net/en/latest/index.html 入门程序 安装 使用 Visual Studio 中的 NuGet 包管理器控制台…

QT编译并部署QtMqtt相关环境+跑测demo【超详细教程】

文章目录 概要整体架构流程▷下载指定版本的QMqtt源码&#xff1a;▷编译后同步MQTT相关文件&#xff1a; 技术名词解释技术实现步骤详解一、编译源码1、编译报错2、解决思路3、编译通过 二、继续完善mqtt应用环境1、打开编译生成的shadow build文件夹2、同步lib3、同步bin4、同…

【unity中使用高度图创建地图】

unity中使用高度图创建地图 插件 讲解案例为unity2022版本 这个是插件地址 也可以在资源商店中搜索 terrain-tools 介绍 Terrain Tools入门Terrain Tools是一个软件包&#xff0c;你可以选择将其添加到Unity 2019.1或更高版本中的任何项目中。要将该软件包添加到你的项目…

51单片机项目(22)——基于51单片机的计算器protues仿真

1.功能设计 使用4*4矩阵键盘&#xff0c;实现了加减乘除等运算&#xff0c;运算过程及其结果显示在LCD1602屏幕上面。&#xff08;工程保证完整可用&#xff01;&#xff01;&#xff09; 加法演示&#xff1a; 减法演示&#xff1a; 乘法&#xff1a; 除法&#xff1a; 2.模块…

黑马程序员SSM框架-Maven进阶

分模块开发与设计 分模块开发意义 分模块开发 依赖管理 依赖传递 依赖传递冲突问题 可以点击红框按钮查看依赖情况。 可选依赖和排除依赖 继承和聚合 聚合 聚合工程开发 继承 聚合和继承的区别 属性 属性的配置与使用 资源文件引用属性 其他属性&#xff08;了解&#xff0…

线上发布稳定性方案介绍

目录 一、方案说明 二、线上发布问题描述 2.1 无损上下线背景说明 2.1.1 服务⽆法及时下线 2.1.2 初始化慢 2.1.3 注册太早 2.1.4 发布态与运⾏态未对⻬ 三、问题解决方案 3.1 无损下线方案 3.1.1 什么是无损下线 3.1.2 传统解决方式 3.1.3 云原生场景解决方案 3.1…

SpringMVC:SSM(Spring+SpringMVC+MyBatis)代码整理

文章目录 SpringMVC - 07SSM 框架代码整理一、准备工作1. 分析需求、准备数据库2. 新建一个项目&#xff0c;导入依赖&#xff1a;pom.xml3. 用 IDEA 连接数据库 二、MyBatis 层1. 外部配置文件&#xff1a;db.properties2. MyBatis 核心配置文件&#xff1a;mybatis-config.xm…

读书笔记1——用户画像平台构建与业务实践

目录 1.画像的基本概念 2、OLAP的3种建模类型 3.OLAP相关技术发展历程 4.业界画像平台介绍 神策数据 2.火山引擎增长分析 3. GrowingLo 4.阿里云智能用户增长 5.涉及岗位 这是一本从功能模块、技术实现、平台构建、业务应用4个层次由浅入深地讲解用户画像的著作。作者在…

一套好的商业模式,助力生意长虹!

在当今竞争激烈的市场环境中&#xff0c;一套好的商业模式对于企业的成功至关重要。一个优秀的商业模式不仅能够提高企业的盈利能力&#xff0c;还能让企业在市场中脱颖而出&#xff0c;实现长期的稳定发展。本文将为您揭示一套神奇的商业模式&#xff0c;帮助您的生意长虹&…

【分布式配置中心】聊聊Apollo的安装与具体配置变更的原理

【管理设计篇】聊聊分布式配置中心 之前就写过一篇文章&#xff0c;介绍配置中心&#xff0c;但是也只是简单描述了下配置中心的设计点。本篇从apollo的安装到部署架构到核心原理进一步解读&#xff0c;大概看了下apollo的原理&#xff0c;感觉没有必要深究&#xff0c;所以就…