875. 爱吃香蕉的珂珂(算法思维系列)

╰半夏微凉° 2023-10-05 20:31 121阅读 0赞

875. 爱吃香蕉的珂珂

  • 题目
  • 解题思路
  • 代码

题目

珂珂喜欢吃香蕉。这里有 N 堆香蕉,第 i 堆中有 piles[i] 根香蕉。警卫已经离开了,将在 H 小时后回来。

珂珂可以决定她吃香蕉的速度 K (单位:根/小时)。每个小时,她将会选择一堆香蕉,从中吃掉 K 根。如果这堆香蕉少于 K 根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉。

珂珂喜欢慢慢吃,但仍然想在警卫回来前吃掉所有的香蕉。

返回她可以在 H 小时内吃掉所有香蕉的最小速度 K(K 为整数)。
在这里插入图片描述

解题思路

见书360

代码

  1. class Solution {
  2. public int minEatingSpeed(int[] piles, int H) {
  3. int left = 1, right = getMax(piles) + 1;
  4. while (left < right) {
  5. // 防止溢出
  6. int mid = left + (right - left) / 2;
  7. if (canFinish(piles, mid, H)) {
  8. right = mid;
  9. } else {
  10. left = mid + 1;
  11. }
  12. }
  13. return left;
  14. }
  15. //以speed的速率是否能在h小时内吃完香蕉
  16. private boolean canFinish(int[] piles, int speed, int h) {
  17. int time = 0;
  18. for (int pile : piles) {
  19. time += timeOf(pile, speed);
  20. }
  21. return time <= h;
  22. }
  23. //以spped的速度吃N个香蕉要多久
  24. private int timeOf(int pile, int speed) {
  25. return (pile / speed) + ((pile % speed) > 0 ? 1 : 0);
  26. }
  27. //获取数组中的最大值
  28. private int getMax(int[] piles) {
  29. int max = 0;
  30. for (int num : piles) {
  31. max = Math.max(max, num);
  32. }
  33. return max;
  34. }
  35. }

发表评论

表情:
评论列表 (有 0 条评论,121人围观)

还没有评论,来说两句吧...

相关阅读

    相关 糖果

    我爱吃糖果 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^\_^ 题目描述 圣诞节快到了,金菊巨意外