美文网首页
(二分左端点)爱吃香蕉的珂珂

(二分左端点)爱吃香蕉的珂珂

作者: 小幸运Q | 来源:发表于2021-04-17 17:43 被阅读0次
image.png

利用二分查找最优的K,K得到后在计算中也引入二分查找左端点优化计算。

class Solution:
    def left_bound(self,nums, target) :
        # 单侧的情况直接返回解
        if target>nums[-1]:
            return len(nums)-1
        if target<nums[0]:
            return -1
        left=0
        right=len(nums)-1
        # [0,len(nums)-1]
        while(left<=right):
            # print(left,right)
            mid=(left+right)//2
            if nums[mid]>=target:
                right=mid-1
                # mid 不可能是解,所以并没有right在该情况下没有问题
            elif nums[mid]<target:
                left=mid+1
                # 留下了target = 2 nums[left]=3所以退出while,需要return前擦屁股
        # 检查越界
        if nums[left]>target:
            left-=1
        return left
    
    def minEatingSpeed(self, piles: List[int], H: int) -> int:
        piles=sorted(piles)
        left=1
        right=piles[-1]
        res=0
        mid=0
        while(left<=right):
            mid=(left+right)//2
            start=self.left_bound(piles,mid)
            res=start+1
            for j in range(start+1,len(piles)):
                if piles[j]%mid==0:
                    res+=piles[j]//mid
                else:
                    res+=piles[j]//mid+1
            if res<=H:
                # left很稳一定是解
                right=mid-1
            elif res>H:
                # left也肯定是解
                left=mid+1 # left就是解
        return left

相关文章

网友评论

      本文标题:(二分左端点)爱吃香蕉的珂珂

      本文链接:https://www.haomeiwen.com/subject/nrzulltx.html