题目:2187. 完成旅途的最少时间
思路:二分查找。花费时间越长,次数就越多,满足单调性。采用二分查找。左右区间的最大差值为10^14 。时间复杂度为(10^5 log(10^14))
C++版本:
class Solution {
public:
long long check(long long u,vector<int>& time){
long long res=0;
for(auto x:time){
res+=u/x;
}
return res;
}
long long minimumTime(vector<int>& time, int totalTrips) {
long long l=1,r=1e14+10;
while(l<r){
long long mid=(l+r)/2;
if(check(mid,time)>=1ll*totalTrips) r=mid;
else l=mid+1;
}
return l;
}
};
JAVA版本:
class Solution {
private long check(long u,int[] time){
long res=0;
for(var x:time){
res+=u/x;
}
return res;
}
public long minimumTime(int[] time, int totalTrips) {
long l=1,r=(long)(1e14+10);
while(l<r){
long mid=(l+r)/2;
if(check(mid,time)>=totalTrips) r=mid;
else l=mid+1;
}
return l;
}
}