美文网首页
Split Array Largest Sum

Split Array Largest Sum

作者: 我叫胆小我喜欢小心 | 来源:发表于2017-05-22 16:07 被阅读29次

    题目来源
    给一个数组及一个整数m,求将数组分割成m块,使得这m块中最大的和最小。
    我一开始没有理解好题目,以为是可以随机分成m组,但是实际上每个小组是连续的。
    然后最小和肯定是位于最大元素和数组和之间的,然后进行二分,每次判断是否可以分成m组小于mid的,假如可以,那么mid还可以更小,假如不行,mid必须加大。

    class Solution {
    public:
        int splitArray(vector<int>& nums, int m) {
            int maxNum = 0;
            long long sum = 0;
            for (auto num : nums) {
                sum += num;
                maxNum = max(maxNum, num);
            }
            long long l = maxNum, r = sum;
            while (l <= r) {
                long long mid = (l + r) / 2;
                if (valid(mid, nums, m))
                    r = mid - 1;
                else
                    l = mid + 1;
            }
            return l;
        }
        
        bool valid(int target, vector<int>& nums, int m)
        {
            int count = 1;
            long long total = 0;
            for (auto num : nums) {
                total += num;
                if (total > target) {
                    total = num;
                    count++;
                    if (count > m)
                        return false;
                }
            }
            return true;
        }
    };
    

    相关文章

      网友评论

          本文标题:Split Array Largest Sum

          本文链接:https://www.haomeiwen.com/subject/pixixxtx.html