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