C++力扣Leetcode算法1--贪心算法

目录

455 孩子分饼干

135 孩子发糖果

435  消除重叠区间

605 花坛种花

452 弓箭射气球

763 字符串分片

122 股票收益II

406 人的身高排列

665 非递减数列数组


看的书自学 《高畅Leetcode刷题》 过程很痛苦 不建议学习 不会的地方没有解答之处 到处查找很困扰 浪费时间

错误的地方欢迎大家相互交流 能改正最好啦 蟹蟹

贪心算法就是啥都想要,从局部最优解达到全局最优解,前提,局部最优解结果互不干扰

做题时可以考虑遍历,选择,排序

以下试题用到的头文件和命名空间

#include <vector>
#include <algorithm>
#include <numeric>
#include <deque>

using namespace std;

455 孩子分饼干

有一群孩子和一堆饼干,每个孩子有一个饥饿度,每个饼干都有一个大小。
每个孩子只能吃一个饼干,且只有饼干的大小不小于孩子的饥饿度时,这个孩子才能吃饱。
求解最多有多少孩子可以吃饱。
解:1.饥饿度最小的孩子最容易吃饱。
    2.饥饿度和饼干大小排序,方便查找
    3.贪心算法,寻找局部最优解,最后全局最优解,局部结果互不干扰
书中最优解

int algorithm::findCountChildren(vector<int>& children, vector<int>& cookies)
{
	sort(children.begin(), children.end());
	sort(cookies.begin(), cookies.end());
	int child = 0, cookie = 0;
	while (child < children.size() && cookie < cookies.size()) {
		if (children[child] <= cookies[cookie]) ++child;
		++cookie;
	}
	return child;
}

135 孩子发糖果

一群孩子站成一排,每一个孩子有自己的评分。现在需要给这些孩子发糖果,
规则是如果一个孩子的评分比自己身旁的一个孩子要高,那么这个孩子就必须得到比身旁孩子更多的糖果;
所有孩子至少要有一个糖果。求解最少需要多少个糖果。
解:1.每个孩子一个糖果
    2.从左往右遍历,右边的分数比左边的高,给右边的再给一个糖果
    从右往左遍历,左边的分数比右边的高,左边糖果比右边少就在右边基础上加一
书中最优解

int algorithm::candy(vector<int>& ratings)
{
	int size = ratings.size();
	vector<int> num(size, 1);
	if (size < 2) {
		return size;
	}
	for (int i = 1; i < size; ++i) {
		if (ratings[i] > ratings[i - 1]) {
			num[i] = num[i - 1] + 1;
		}
	}
	for (int i = size - 1; i > 0; --i) {
		if (ratings[i] < ratings[i - 1]) {
			num[i - 1] = max(num[i - 1], num[i] + 1);
			//用于比较两个值并返回较大的那个,在头文件<algorithm>中
			//max_element函数在整数向量中找到最大值
		}
	}
	return accumulate(num.begin(), num.end(), 0);
	//accumulate(起始迭代器, 结束迭代器, 初始值, 自定义操作函数)
	// 函数共有四个参数,其中前三个为必须,第四个为非必需。若不指定第四个参数,
	// 则默认对范围内的元素进行累加操作。
	// 也可以拼接字符串
	//在头文件<numeric>中,包括乘除
}

435  消除重叠区间

给定多个区间,计算让这些区间互不重叠所需要移除区间的最少个数。起止相连不算重叠
解:1.取区间的头和尾组成数组排序
    2.判断区间是否相交
    3

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值