【代码随想录算法训练营——Day28】贪心算法——134.加油站、135.分发糖果、860.柠檬水找零、406.根据身高重建队列

LeetCode题目链接

https://leetcode.cn/problems/gas-station/description/

https://leetcode.cn/problems/candy/description/

https://leetcode.cn/problems/lemonade-change/description/

https://leetcode.cn/problems/queue-reconstruction-by-height/description/

题解
134.加油站

暴力写法通过了,我就掌握暴力写法吧。题目可能还没看懂。暴力解法也要注意索引值以及对于题目解释案例的变通之处。比如计算rest的方法。

135.分发糖果

思路还记得,就记得要从前向后和从后向前两种遍历方式,但糖果的加法完全忘了,其实两种遍历分别是两种不同的解法,尤其是第二种。

860.柠檬水找零

记得思路,基本上写的和题解是一样的。

406.根据身高重建队列

考虑两个维度,一定要先确定好一个维度再看下一个维度。

代码里注意sort的写法,空vector插入的写法,两个语法问题。(保证一定是从位置0开始插入?)

代码

cpp 复制代码
//134.加油站
cpp 复制代码
//135.分发糖果
cpp 复制代码
//860.柠檬水找零
#include <iostream>
#include <vector>
#include <map>
using namespace std;

class Solution {
public:
    bool lemonadeChange(vector<int>& bills) {
		map<int, int> mp;
		for (int i = 0;i < bills.size();i++) {
			if (bills[i] == 5) {
				mp[5]++;
			}
			else if (bills[i] == 10) {
				mp[10]++;
				mp[5]--;
				if (mp[5] < 0) return false;
			}
			else {
				if (mp[10] > 0 && mp[5] > 0) {
					mp[20]++;
					mp[10]--;
					mp[5]--;
				}
				else if (mp[5] >= 3) {
					mp[20]++;
					mp[5] -= 3;
				}
				else {
					return false;
				}
			}
		}
		return true;
    }
};

int main() {
	Solution s;
	vector<int> nums1 = { 5,5,5,10,20 }, nums2 = { 5,5,10,10,20 };
	printf("%d", s.lemonadeChange(nums2));
	return 0;
}
cpp 复制代码
//406.根据身高重建队列
相关推荐
代码不停13 分钟前
BFS解决floodfill算法题目练习
算法·宽度优先
上弦月-编程19 分钟前
C语言指针从入门到实战
java·jvm·算法
WL_Aurora19 分钟前
Python 算法基础篇之树和二叉树
python·算法
txzrxz21 分钟前
关于前缀和
算法·动态规划·图论
杨连江23 分钟前
载流子矩阵限域束缚实现常温常压超导的理论与结构设计
算法
做cv的小昊31 分钟前
【TJU】研究生应用统计学课程笔记(6)——第二章 参数估计(2.4 区间估计)
人工智能·笔记·线性代数·算法·机器学习·数学建模·概率论
普贤莲花39 分钟前
【2026年第18周---写于20260501】---舍得
程序人生·算法·leetcode
2zcode39 分钟前
基于深度学习的口腔疾病图像识别系统(UI界面+改进算法+数据集+训练代码)
人工智能·深度学习·算法
Sarvartha1 小时前
N 个字符串最长公共子序列(LCS)求解问题
数据结构·算法
一切皆是因缘际会1 小时前
下一代 AI 架构:基于记忆演化与单向投影的安全智能系统
大数据·人工智能·深度学习·算法·安全·架构