class Solution {
public:
int getNum(vector<int>& time, int vol) {
int res = 1;
int Sum = 0;
int Max = 0;
for (int i = 0; i < time.size(); i++) {
if (time[i] > Max) {
Sum += Max;
Max = time[i];
}
else {
Sum += time[i];
}
if (Sum > vol) {
res++;
Sum = 0;
Max = time[i];
}
}
return res;
}
int minTime(vector<int>& time, int m) {
int n = time.size();
if (!n) {
return 0;
}
int Sum = 0;
int Max = 0;
for (int i = 0; i < n; i++) {
Sum += time[i];
Max = max(Max, time[i]);
}
int low = 0;
int high = Sum - Max;
while (low < high) {
int mid = (low + high) / 2;
int res = getNum(time, mid);
if (res > m) {
low = mid + 1;
}
else {
high = mid;
}
}
return low;
}
};
二分法解最小化【數組分段和】問題
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.