首页 > 其他分享 >875. 爱吃香蕉的珂珂(leetcode)

875. 爱吃香蕉的珂珂(leetcode)

时间:2024-09-27 15:33:57浏览次数:8  
标签:香蕉 return nums int sum 875 mid check leetcode

https://leetcode.cn/problems/koko-eating-bananas/description/

二段性:速度有得完和不吃完两个段
关键点是编写check函数,比较繁杂

class Solution {
    public int minEatingSpeed(int[] piles, int h) {
        int sum=0;
        int max=0;
        for(int i=0;i<piles.length;i++)
        {
            sum+=piles[i];
            max=Math.max(max,piles[i]);
        }
        return lowerBound(sum,h,max,piles);
    }

    // 查找第一个能吃的完的速度
    int lowerBound(int sum,int h,int max,int[] nums)
    {
        int l=1,r=max;
        while(l<=r)
        {
            int mid=l+(r-l>>1);
            if(check(mid,nums,h))l=mid+1;
            else r=mid-1;
        }
        return l;
    }

    // 判断速度为mid的情况能否吃完,不能吃完返回false,吃得完返回true
    boolean check(int mid,int[] nums,int h)
    {
        // 总时间
        int sum=nums.length;
        for(int num:nums)
        {
            // 吃完一堆要用(p/k上取整)个小时
            sum+=(num-1)/mid;
            if(sum>h)return true; // 提前返回,怕溢出
        }
        return sum>h;
    }
}

 

标签:香蕉,return,nums,int,sum,875,mid,check,leetcode
From: https://www.cnblogs.com/lxl-233/p/18435869

相关文章

  • Leetcode 154. 寻找旋转排序数组中的最小值 II
    1.题目基本信息1.1.题目描述已知一个长度为n的数组,预先按照升序排列,经由1到n次旋转后,得到输入数组。例如,原数组nums=[0,1,4,4,5,6,7]在变化后可能得到:若旋转4次,则可以得到[4,5,6,7,0,1,4]若旋转7次,则可以得到[0,1,4,4,5,6,7]注意,数组[a[0],a[1],a[2],......
  • 【LeetCode Hot 100】21. 合并两个有序链表
    题目描述最简单粗暴的想法是将两个链表的所有元素拿出来放在一个数组中,再将此数组排序,最后生成一个新链表并返回。由于给出的参数本身就是两个排好序的链表,可以进行一次遍历,就能保证元素仍然是有序的:每次比较当前指针指向的两个元素的大小,较小的拿出来作为当前元素并将指针向前移......
  • LeetCode刷题日记之二叉树(二)
    目录前言左叶子之和找树左小角的值总结前言经过数模比赛的四天忙碌后博主继续开始LeetCode学习了,给大家分享学习心路的同时也是在不断勉励自己每天把自己的学的东西去进行一个产出记录,不足的地方欢迎大家批评指正,一起加油吧朋友们!......
  • 410. 分割数组的最大值(leetcode)
    https://leetcode.cn/problems/split-array-largest-sum/description/比较难的二分,关键点在于看出二段性,段数越多最大值越小,段数越小最大值越大,二分最大值,然后就是最大值的合法性校验(判断段数<=k),用于二分的checkclassSolution{publicintsplitArray(int[]n......
  • 【leetcode】2. 两数相加
      总体思路:1.将两个链表里的数字相加:总左往右加,存入第三方链表L3里;2.设置一个进位符t,用来存储每位相加的进位信息;3.对多出来单独的链表进行处理(只需考虑进位),接入到L3的后面。/***Definitionforsingly-linkedlist.*structListNode{*intval;*s......
  • 【LeetCode Hot 100】20. 有效的括号
    题目描述这个题目在讲解栈的应用的时候是常用的例子,在遍历括号串的时候维护一个栈结构,如果当前字符是前括号,暂时没有与之配对的后括号,则先将其压入栈中。C++STL和Java都提供了对应的容器,但是由于我们知道栈的大小不可能超过括号串的长度,所以也可以手动用数组模拟,这样运行速度可......
  • leetcode每日一题day15(24.9.25)——公司命名
    思路:首先如果没有相同的后缀,则无论只要不是相同的首字母交换都不会出现重复情况,如果有重复后缀,则还需多增加个不能和,首字符与另一相同后缀字串的首字符相同的字串交换。主要矛盾已经明确,则可对矛盾进行分析。首先把范围缩小到只有两种不同首字母,对于这种情况      ......
  • Leetcode 622. 设计循环队列
    1.题目基本信息1.1.题目描述设计你的循环队列实现。循环队列是一种线性数据结构,其操作表现基于FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列......
  • Leetcode 706. 设计哈希映射
    1.题目基本信息1.1.题目描述不使用任何内建的哈希表库设计一个哈希映射(HashMap)。实现MyHashMap类:MyHashMap()用空映射初始化对象voidput(intkey,intvalue)向HashMap插入一个键值对(key,value)。如果key已经存在于映射中,则更新其对应的值value。intget(in......
  • 【算法题】63. 不同路径 II-力扣(LeetCode)-”如果起点有障碍物,那么便到不了终点“
    【算法题】63.不同路径II-力扣(LeetCode)-”如果起点有障碍物,那么便到不了终点“1.题目下方是力扣官方题目的地址63.不同路径II一个机器人位于一个mxn网格的左上角(起始点在下图中标记为“Start”)。机器人每次只能向下或者向右移动一步。机器人试图达到网格......