Leetcode1705. 吃苹果的最大数目[C++题解]:贪心
文章目录
- 本题思路
- 补充知识priority_queue优先队列的使用
题目链接:1705. 吃苹果的最大数目
本题思路
本题复述:共n天,给定每天新产生苹果的数目和这些苹果的过期时间。每天最多只能吃1个苹果,问n天最多吃多少个苹果。
策略:贪心,每次吃最早过期的苹果。
用小根堆来维护当前可以吃的苹果的集合。但是不是盲目地存放,而是把同一天产生的苹果用一个pair来表示,(timeLast, count)
,其中timeLast表示最后可以吃的时间(腐烂时间的前一天),count表示这一天产生的苹果的数量。然后按照过期时间来维护小根堆。
每次吃的时候,在最早过期的那堆苹果里选择一个吃。
for循环遍历的是可以吃到苹果的天数, 因为n小于等于20000,而且每天可以产生的苹果最多也是20000,每天最多吃一个,所以最坏的情况是遍历40000天。
ac代码
class Solution {public:int eatenApples(vector<int>& apples, vector<int>& days) {const int MaxApple=40000;//最多40000天可以吃苹果typedef pair<int,int> PII;priority_queue<PII, vector<PII>,greater<PII> > heap;int res=0;int n=apples.size();for(int i=0;i<MaxApple;i++){if(i<n && apples[i]>0)//入堆heap.push({i+days[i]-1,apples[i] });// 最后可以吃的时间 和 苹果数量//苹果过期了,不能吃,出堆while(!heap.empty()&&heap.top().first<i) heap.pop();if(heap.empty() ) continue;//吃苹果并出堆auto t=heap.top();heap.pop();res++;if(--t.second) //没吃完,重新加回堆里heap.push(t);}return res;}
};
补充知识priority_queue优先队列的使用
优先队列容器默认是大根堆,即每次访问的都是最大值。
priority_queue<float> q; //默认大根堆
priority_queue<float,vector<float>, greater<float>> q; //小根堆写法
#include<bits/stdc++.h>using namespace std;int main(){priority_queue<float> q; //默认大根堆 //insert three elements into the priority queueq.push(66.6);q.push(22.2);q.push(44.4);cout<<q.top()<<" ";q.pop();cout<<q.top()<<endl;q.pop();//insert three more elementsq.push(11.1);q.push(55.5);q.push(33.3);//skip one elementq.pop(); //删除最大的 //pop and print remaining elementswhile(!q.empty()){cout<<q.top()<<" ";q.pop();}cout<<endl;
}
大根堆输出结果
小根堆的输出结果
priority_queue<float,vector<float>, greater<float>> q; //默认大根堆
Leetcode1705. 吃苹果的最大数目[C++题解]:贪心相关推荐
- 1705. 吃苹果的最大数目
链接:1705. 吃苹果的最大数目 题解: class Solution { public:typedef std::pair<int, int> pii;int eatenApples( ...
- 【每日一题】 1705. 吃苹果的最大数目
[每日一题] 1705. 吃苹果的最大数目 避免每日太过咸鱼,一天搞定一道LeetCode算法题 一.题目描述 有一棵特殊的苹果树,一连 n 天,每天都可以长出若干个苹果.在第 i 天,树上会长出 a ...
- 【力扣】1705. 吃苹果的最大数目
1705. 吃苹果的最大数目 有一棵特殊的苹果树,一连 n 天,每天都可以长出若干个苹果.在第 i 天,树上会长出 apples[i] 个苹果,这些苹果将会在 days[i] 天后(也就是说,第 i ...
- 模拟卷Leetcode【普通】1705. 吃苹果的最大数目
1705. 吃苹果的最大数目 有一棵特殊的苹果树,一连 n 天,每天都可以长出若干个苹果.在第 i 天,树上会长出 apples[i] 个苹果,这些苹果将会在 days[i] 天后(也就是说,第 i ...
- 1705. 吃苹果的最大数目(贪心、优先队列(堆)、哈希表),总之先吃快烂的苹果
1705. 吃苹果的最大数目 题干 有一棵特殊的苹果树,一连 n 天,每天都可以长出若干个苹果.在第 i 天,树上会长出 apples[i] 个苹果,这些苹果将会在 days[i] 天后(也就是说,第 ...
- 力扣每日一题2021-12-24中等题:吃苹果的最大数目
吃苹果的最大数目 1705.吃苹果的最大数目 题目描述 思路 贪心+优先队列 Java实现 Python实现 1705.吃苹果的最大数目 题目描述 吃苹果的最大数目 思路 贪心+优先队列 为了将吃苹果 ...
- LeetCode - 1705 吃苹果的最大数目
目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 1705. 吃苹果的最大数目 - 力扣(LeetCode) 题目描述 有一棵特殊的苹果树,一连 n 天,每天都可以长出若干个苹果.在 ...
- 1705. 吃苹果的最大数目(贪心算法)
1705. 吃苹果的最大数目 难度中等104 有一棵特殊的苹果树,一连 n 天,每天都可以长出若干个苹果.在第 i 天,树上会长出 apples[i] 个苹果,这些苹果将会在 days[i] 天后(也 ...
- LeetCode 1705. 吃苹果的最大数目(优先队列)
文章目录 1. 题目 2. 解题 1. 题目 有一棵特殊的苹果树,一连 n 天,每天都可以长出若干个苹果. 在第 i 天,树上会长出 apples[i] 个苹果,这些苹果将会在 days[i] 天后( ...
最新文章
- 深度学习框架:GPU
- Android中动态更新ListView
- 【译】NoClassDefFoundError和ClassNotFoundException的不同
- c primer英文版第5版_2019足坛10大巨星:梅西第2范戴克第3,C罗第5
- java 各种数据库连接_JAVA连接各种数据库
- PHP设计模式练习——制作简单的投诉页面
- php oci8 11,Linux下PHP5.2 Oracle客户端扩展(OCI8)安装
- Sphinx 文档例子
- 疫情下的国内云市场,正是大展拳脚的好时机!
- 阿里云前端周刊 - 第 15 期
- 解决 PhpStorm 对 用单例模式实例化PHP类时,代码自动提示功能失效 的问题
- python中的对象有哪些_python中的对象
- Vivado2018的使用
- 现代交换技术的基本概念及基本知识
- java 裁剪 pdf_PDFBox:使用Java轻松从PDF文件提取内容
- 【linux】运维之LAMP
- java 调用felix_使用eclipse开发felix的OSGI插件
- 树莓派可以搜索到wifi但是连接不上的问题解决方法
- elementUI table表格合并相同的内容
- 离线信号与连续信号伸缩变换的不同
热门文章
- python3.4安装suds
- 字符串和json之间的互相转化
- 电脑开机进入不了XP界面
- 不再为DataGrid生成的表格的单无格中的内容过长、自动折行、表格撑开等问题而烦恼----一个很久以前的做品...
- iframe ajax上传,ajax--iframe模拟ajax文件上传效果
- 【STM32】定时器中断实验代码详解
- 【Matlab】求解积分方程的数值解
- 2.2 经典网络-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
- 2.1 进行误差分析-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
- 计算机语言pandas,计算机语言python100道pandas(含答案)