贪心算法精品题

embedded/2025/3/1 11:43:14/

1.找钱问题

本题的贪心策略在于我们希望就可能的保留作用大的5元

class Solution {
public:bool lemonadeChange(vector<int>& bills) {std::map<int ,int> _map;for(auto ch:bills){if(ch == 5) _map[ch]++;else if(ch == 10){if(_map[5] == 0) return false;else{_map[5]--;_map[ch]++;}}else if(ch == 20){//这里的判断_map [5]!= 0 && _map[10] != 0其实是贪心我用10元代替两张5if(_map [5]!= 0 && _map[10] != 0){_map[5]--;_map[10]--;_map[ch]++;}else if(_map[5] >= 3){_map[5] -= 3;_map[ch]++;}else return false;}}return true;}
};

题目链接:860. 柠檬水找零 - 力扣(LeetCode)

2.最大数

这道题涉及一个知识点:一个数比另一个数大那么转换为字符串以后对应的大小关系并不会改变

那么对于 string A = "12"  string B = "23"  string C = "14".如果进行排序由于BA大于AB故B位于A的前面由于CA大于AC所以C位于A的前面    故顺序为:B C A那么BCA是不是他们组成的最大数呢这里显然是,但是要以此类推就能知道这题我们只需要重载排序规则就能完成,当然这题还存在一些便捷条件比如如个排序数组的开头是“0”说明这些数着的最大值就是0

class Solution {
public:static bool compare(int a,int b){std::string A = std::to_string(a);std::string B = std::to_string(b);std::string AB = A+B;std::string BA = B+A;return AB>BA;} string largestNumber(vector<int>& nums) {sort(nums.begin(),nums.end(),compare);string ret;for(auto ch:nums) ret+=std::to_string(ch);return ret[0] == '0'?"0":ret;}
};

题目链接:179. 最大数 - 力扣(LeetCode)

3.摆动序列

这个题目可以理解为找到一个子序列,满足子序列内的元素时先增在减或者先减在增的,就类似正弦函数。

我们怎么才能找到最长的满足条件的子序列呢,我先做了一个我就找极大值和极小值来组成这个子序列,然后就过了,很神奇,然后看了看题解才明白为什么

看这张图,我们发现其实有三条可选择的路径但是其实本质上都是一样的,都是上升区间取一个值然后在相邻的下降区间取一个比自己小的数

那么我们的贪心策略就是直接去上升区间和下降区间的端点也就是极大值和极小值。

class Solution {
public:int wiggleMaxLength(vector<int>& nums) {int left = 0,right = 0;int ret = 0;for(int i = 0;i<nums.size()-1;i++){right = nums[i+1]-nums[i];if(right == 0) continue;else if(right*left<=0){left = right;ret++;}else continue;}return ret+1;}
};


http://www.ppmy.cn/embedded/169043.html

相关文章

SOME/IP-SD -- 协议英文原文讲解7

前言 SOME/IP协议越来越多的用于汽车电子行业中&#xff0c;关于协议详细完全的中文资料却没有&#xff0c;所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块&#xff1a; 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 5.1.4 Ser…

Qt关于平滑滚动的使用QScroller及QScrollerProperties类说明

一、触控时代的滚动工具&#xff1a;QScroller类设计介绍 1.1 从机械滚轮到数字惯性 在触控设备普及前&#xff0c;滚动操作如同老式打字机的滚轴&#xff0c;只能通过鼠标滚轮或滚动条进行离散式控制。QScroller的出现如同给数字界面装上了"惯性飞轮"&#xff0c;…

软件高级架构师 - 设计模式

六大原则 1. 单一职责原则 一个类只负责一项职责。 案例 餐厅中的厨师和服务员&#xff1a; 厨师的职责是做饭&#xff0c;服务员的职责是上菜。 如果让厨师同时负责做饭和上菜&#xff0c;会导致职责混乱&#xff0c;效率降低。 2. 开放-封闭原则&#xff08;OCP&#xff09…

配置Spring Boot中的Jackson序列化

配置Spring Boot中的Jackson序列化 在开发基于Spring Boot的应用程序时&#xff0c;Jackson是默认的JSON序列化和反序列化工具。它提供了强大的功能&#xff0c;可以灵活地处理JSON数据。然而&#xff0c;Jackson的默认行为可能无法完全满足我们的需求。例如&#xff0c;日期格…

React antd的datePicker自定义,封装成组件

一、antd的datePicker自定义 需求&#xff1a;用户需要为日期选择器的每个日期单元格添加一个Tooltip&#xff0c;当鼠标悬停时显示日期、可兑换流量余额和本公会可兑流量。这些数据需要从接口获取。我需要结合之前的代码&#xff0c;确保Tooltip正确显示&#xff0c;并且数据…

【Prometheus】prometheus服务发现与relabel原理解析与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

Android实现漂亮的波纹动画

Android实现漂亮的波纹动画 本文章讲述如何使用二维画布canvas和camera、矩阵实现二、三维波纹动画效果&#xff08;波纹大小变化、画笔透明度变化、画笔粗细变化&#xff09; 一、UI界面 界面主要分为三部分 第一部分&#xff1a;输入框&#xff0c;根据输入x轴、Y轴、Z轴倾…

【MySQL】数据库开发技术:内外连接与表的索引穿透深度解析

**前言:**本节内容主要讲解表的内连和外连以及索引的一部分。 注意&#xff1a; 索引是很重要的知识点。务必学习&#xff01;&#xff01;本节将会主要谈一谈什么是索引&#xff0c;如何理解索引。 以及怎么理解MySQL与磁盘的关系。 下面友友们开始学习吧&#xff01; ps&…