410. Split Array Largest Sum

class Solution {
public:
    int splitArray(vector<int>& nums, int m) {
        int _max = -1, _sum = 0;
        for (auto n : nums) {
            if (n > _max)   _max = n;
            _sum += n;
        }
        int i = _max, j = _sum;
        while (i < j - 1) {
            int mid = i + (j - i) / 2;
            if (valid(nums, m, mid))
                j = mid;
            else
                i = mid+1;
        }
        return valid(nums, m, i) ? i : j;
    }
    bool valid(vector<int>& nums, int m, int _sum) {
        for (int cur_sum = 0, i = 0; i < nums.size(); i++) {
            if (nums[i] > _sum) return false;
            if (cur_sum + nums[i] > _sum) {
                cur_sum = 0;
                m--;
                if (m == 0) return false;
            }
            cur_sum += nums[i];
        }
        return true;
    }
};

猜你喜欢

转载自www.cnblogs.com/JTechRoad/p/9096227.html
今日推荐