LeetCode【410】 Split Array Largest Sum

来源:互联网 发布:ios手游源码 编辑:程序博客网 时间:2024/05/20 19:47

Given an array which consists of non-negative integers and an integer m, you can split the array into m non-empty continuous subarrays. Write an algorithm to minimize the largest sum among these m subarrays.
Note:
If n is the length of array, assume the following constraints are satisfied:
1 ≤ n ≤ 1000
1 ≤ m ≤ min(50, n)

Examples:

Input:
nums = [7,2,5,10,8]
m = 2

Output:
18

下面是用二分查找的方法。

class Solution {public:    bool canSplit(vector<int>& nums, int m, long long sum) {        int c = 1;        long long s = 0;        for (auto& num : nums) {            s += num;            if (s > sum) {                s = num;                ++c;            }        }        return c <= m;    }    int splitArray(vector<int>& nums, int m) {        long long left = 0, right = 0;        for (auto& num : nums) {            left = max(left, (long long)num);            right += num;        }        while (left <= right) {            long long mid = left + (right-left)/2;            if (canSplit(nums, m, mid))                right = mid-1;            else                left = mid+1;        }        return left;    }};
原创粉丝点击