题目描述
给你一个浮点数 hour
,表示你到达办公室可用的总通勤时间。要到达办公室,你必须按给定次序乘坐 n
趟列车。另给你一个长度为 n
的整数数组 dist
,其中 dist[i]
表示第 i
趟列车的行驶距离(单位是千米)。
每趟列车均只能在整点发车,所以你可能需要在两趟列车之间等待一段时间。
- 例如,第
1
趟列车需要1.5
小时,那你必须再等待0.5
小时,搭乘在第 2 小时发车的第2
趟列车。
返回能满足你准时到达办公室所要求全部列车的 最小正整数 时速(单位:千米每小时),如果无法准时到达,则返回 -1
。
生成的测试用例保证答案不超过 107
,且 hour
的 小数点后最多存在两位数字 。
题目思路
使用二分法。
Check函数
public boolean check(int mid, int[] dist, double hour){
double count = 0;
int fi = dist.length - 1;
for(int i = 0; i < dist.length - 1; i++){
count += Math.ceil(dist[i] / (mid * 1.0));
}
count += dist[fi]/(mid/1.0);
if(count <= hour){
return true;
}
return false;
}
主函数
public int minSpeedOnTime(int[] dist, double hour) {
int l = 0;
int r = (int)1e7 + 10;
while(l < r){
int mid = l + r >> 1;
if(check(mid, dist, hour)){
r = mid;
}else{
l = mid + 1;
}
}
if(check(r, dist, hour)){
return l;
}
return -1;
}