# 2141. Maximum Running Time of N Computers
###### tags: `Leetcode` `Binary Search` `Hard`
Link: https://leetcode.com/problems/maximum-running-time-of-n-computers/
## 思路
核心思想: If the computers cannot run simultaneously for ```a``` minutes, then definitely they cannot run simultaneously for ```b > a``` minutes.
设计canFit():
tricky part is the canFit function. If ```sum(min(batteries[i], k)) > n * k```, ```k``` is achievable.
this is true because battery.size > n is always true, so if the ```sum(min(batteries[i], k)) > n * k``` is true, meaning we can always find a way to move the smaller battery's energy on the the top ```n```
所以对于每个battery我们取```min(time, battery)```,然后加总在一起,如果```sum>time*k```说明可以实现
## Code
```java=
class Solution {
public long maxRunTime(int n, int[] batteries) {
long batSum = 0;
for(int battery:batteries) batSum += battery;
long start = 0;
long end = batSum/n+1;
while(start<end){
long mid = start+(end-start)/2;
if(canFit(n, batteries, mid)){
start = mid+1;
}
else end = mid;
}
return start-1;
}
private boolean canFit(int n, int[] batteries, long time){
long timeSum = 0;
for(int battery:batteries){
timeSum += Math.min(time, battery);
}
return timeSum>=n*time;
}
}
```