Skip to content

Commit fc96647

Browse files
authored
Update Solution.cpp
1 parent c2c9a4a commit fc96647

File tree

1 file changed

+21
-17
lines changed
  • solution/1800-1899/1870.Minimum Speed to Arrive on Time

1 file changed

+21
-17
lines changed
Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,28 @@
11
class Solution {
22
public:
33
int minSpeedOnTime(vector<int>& dist, double hour) {
4-
int left = 1, right = 1e7;
5-
while (left < right) {
6-
int mid = (left + right) >> 1;
7-
if (check(dist, mid, hour)) {
8-
right = mid;
4+
if (dist.size() > ceil(hour)) {
5+
return -1;
6+
}
7+
const int m = 1e7;
8+
int l = 1, r = m + 1;
9+
int n = dist.size();
10+
auto check = [&](int v) {
11+
double s = 0;
12+
for (int i = 0; i < n; ++i) {
13+
double t = dist[i] * 1.0 / v;
14+
s += i == n - 1 ? t : ceil(t);
15+
}
16+
return s <= hour;
17+
};
18+
while (l < r) {
19+
int mid = (l + r) >> 1;
20+
if (check(mid)) {
21+
r = mid;
922
} else {
10-
left = mid + 1;
23+
l = mid + 1;
1124
}
1225
}
13-
return check(dist, left, hour) ? left : -1;
14-
}
15-
16-
bool check(vector<int>& dist, int speed, double hour) {
17-
double res = 0;
18-
for (int i = 0; i < dist.size(); ++i) {
19-
double cost = dist[i] * 1.0 / speed;
20-
res += (i == dist.size() - 1 ? cost : ceil(cost));
21-
}
22-
return res <= hour;
26+
return l > m ? -1 : l;
2327
}
24-
};
28+
};

0 commit comments

Comments
 (0)