文章目录

  • 本题思路
  • 补充知识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++题解]:贪心相关推荐

  1. 1705. 吃苹果的最大数目

    链接:1705. 吃苹果的最大数目 题解: class Solution { public:typedef std::pair<int, int> pii;int eatenApples( ...

  2. 【每日一题】 1705. 吃苹果的最大数目

    [每日一题] 1705. 吃苹果的最大数目 避免每日太过咸鱼,一天搞定一道LeetCode算法题 一.题目描述 有一棵特殊的苹果树,一连 n 天,每天都可以长出若干个苹果.在第 i 天,树上会长出 a ...

  3. 【力扣】1705. 吃苹果的最大数目

    1705. 吃苹果的最大数目 有一棵特殊的苹果树,一连 n 天,每天都可以长出若干个苹果.在第 i 天,树上会长出 apples[i] 个苹果,这些苹果将会在 days[i] 天后(也就是说,第 i ...

  4. 模拟卷Leetcode【普通】1705. 吃苹果的最大数目

    1705. 吃苹果的最大数目 有一棵特殊的苹果树,一连 n 天,每天都可以长出若干个苹果.在第 i 天,树上会长出 apples[i] 个苹果,这些苹果将会在 days[i] 天后(也就是说,第 i ...

  5. 1705. 吃苹果的最大数目(贪心、优先队列(堆)、哈希表),总之先吃快烂的苹果

    1705. 吃苹果的最大数目 题干 有一棵特殊的苹果树,一连 n 天,每天都可以长出若干个苹果.在第 i 天,树上会长出 apples[i] 个苹果,这些苹果将会在 days[i] 天后(也就是说,第 ...

  6. 力扣每日一题2021-12-24中等题:吃苹果的最大数目

    吃苹果的最大数目 1705.吃苹果的最大数目 题目描述 思路 贪心+优先队列 Java实现 Python实现 1705.吃苹果的最大数目 题目描述 吃苹果的最大数目 思路 贪心+优先队列 为了将吃苹果 ...

  7. LeetCode - 1705 吃苹果的最大数目

    目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 1705. 吃苹果的最大数目 - 力扣(LeetCode) 题目描述 有一棵特殊的苹果树,一连 n 天,每天都可以长出若干个苹果.在 ...

  8. 1705. 吃苹果的最大数目(贪心算法)

    1705. 吃苹果的最大数目 难度中等104 有一棵特殊的苹果树,一连 n 天,每天都可以长出若干个苹果.在第 i 天,树上会长出 apples[i] 个苹果,这些苹果将会在 days[i] 天后(也 ...

  9. LeetCode 1705. 吃苹果的最大数目(优先队列)

    文章目录 1. 题目 2. 解题 1. 题目 有一棵特殊的苹果树,一连 n 天,每天都可以长出若干个苹果. 在第 i 天,树上会长出 apples[i] 个苹果,这些苹果将会在 days[i] 天后( ...

最新文章

  1. 深度学习框架:GPU
  2. Android中动态更新ListView
  3. 【译】NoClassDefFoundError和ClassNotFoundException的不同
  4. c primer英文版第5版_2019足坛10大巨星:梅西第2范戴克第3,C罗第5
  5. java 各种数据库连接_JAVA连接各种数据库
  6. PHP设计模式练习——制作简单的投诉页面
  7. php oci8 11,Linux下PHP5.2 Oracle客户端扩展(OCI8)安装
  8. Sphinx 文档例子
  9. 疫情下的国内云市场,正是大展拳脚的好时机!
  10. 阿里云前端周刊 - 第 15 期
  11. 解决 PhpStorm 对 用单例模式实例化PHP类时,代码自动提示功能失效 的问题
  12. python中的对象有哪些_python中的对象
  13. Vivado2018的使用
  14. 现代交换技术的基本概念及基本知识
  15. java 裁剪 pdf_PDFBox:使用Java轻松从PDF文件提取内容
  16. 【linux】运维之LAMP
  17. java 调用felix_使用eclipse开发felix的OSGI插件
  18. 树莓派可以搜索到wifi但是连接不上的问题解决方法
  19. elementUI table表格合并相同的内容
  20. 离线信号与连续信号伸缩变换的不同

热门文章

  1. python3.4安装suds
  2. 字符串和json之间的互相转化
  3. 电脑开机进入不了XP界面
  4. 不再为DataGrid生成的表格的单无格中的内容过长、自动折行、表格撑开等问题而烦恼----一个很久以前的做品...
  5. iframe ajax上传,ajax--iframe模拟ajax文件上传效果
  6. 【STM32】定时器中断实验代码详解
  7. 【Matlab】求解积分方程的数值解
  8. 2.2 经典网络-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
  9. 2.1 进行误差分析-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
  10. 计算机语言pandas,计算机语言python100道pandas(含答案)