AM 1251. Split Array Largest Sum
class Solution {
public:
/**
* @param nums: a list of integers
* @param m: an integer
* @return: return a integer
*/
int splitArray(vector<int> &nums, int m) {
// write your code here
// binary search
const int size = nums.size();
if(size < m){
return -1;
}
long long sum = 0;
int maxVal = INT_MIN;
for(auto i : nums){
sum += i;
maxVal = max(maxVal, i);
}
int start = maxVal;
long long end = sum;
while(start < end){ //注意这里和模板不同
long long mid = start + (end - start) / 2;
if(!splitNum(nums, mid, m)){
start = mid + 1; //注意这里的操作。
}
else{
end = mid;
}
}
// if(!splitNum(nums, (long long)end, m)){
// return end;
//}
//else{
return start;
//}
}
bool splitNum(vector<int> &nums, long long target, int m){
int res = 1;
long long sum = 0;
for(auto i : nums){
sum += i;
if(sum > target){
sum = i;
res++;
if(res > m){
return false;
}
}
}
return true;
}
};
Comments
Post a Comment