其他分享
首页 > 其他分享> > 2022-4-23二分查找

2022-4-23二分查找

作者:互联网

1011. 在 D 天内送达包裹的能力

传送带上的包裹必须在 days 天内从一个港口运送到另一个港口。

传送带上的第 i 个包裹的重量为 weights[i]。每一天,我们都会按给出重量(weights)的顺序往传送带上装载包裹。我们装载的重量不会超过船的最大运载重量。

返回能在 days 天内将传送带上的所有包裹送达的船的最低运载能力。

 1 class Solution {
 2     public int shipWithinDays(int[] weights, int days) {
 3         // countDay也是非递增函数
 4         // 求左边界
 5         int l=Arrays.stream(weights).max().getAsInt(),r=25000001;
 6         while (l<r) {
 7             int mid=(l+r)/2;
 8             if (countDay(weights,mid)>days){
 9                 l=mid+1;
10             }else {
11                 r=mid;
12             }
13             //System.out.println(l+" "+r);
14             //System.out.println(countDay(weights,l)+" "+countDay(weights,r));
15         }
16         return l;
17     }
18 
19 
20 
21 
22     public int countDay(int[] weights,int captity){
23         int res=0;
24         int index=0;
25         while (index<weights.length){
26             int sum=0;
27             while (index<weights.length&&sum+weights[index]<=captity){
28                 sum+=weights[index];
29                 index++;
30             }
31             res++;
32         }
33         return res;
34     }
35 }

思路:同样是求非递增函数的左边界。

标签:二分,传送带,23,int,days,countDay,weights,2022,包裹
来源: https://www.cnblogs.com/benbicao/p/16181550.html