您的位置:首页 > 其它

[leetcode 410]Split Array Largest Sum

2017-05-17 11:23 483 查看
题目理解:给一个非负数组,和划分数组的个数m

问题:返回划分的m个子数组中和最大的哪个和,因为划分m个子数组的方法有很多种,假设有k种划分m个子数组的方法,所以就有k个子数组最大和的值,求出这k个值中最小的哪个值返回来。

解决:二分查找

(代码参考https://discuss.leetcode.com/topic/62139/python-solution-dp-and-binary-search/2)

class Solution(object):

    def splitArray(self, nums, m):

        """

        :type nums: List[int]

        :type m: int

        :rtype: int

        """

        def valid(mid):

            count = 0

            current = 0

            for n in nums:

                current += n

                if current>mid:

                    count += 1

                    if count>=m:

                        return False

                    current = n

            return True

        l = max(nums)

        r = sum(nums)

        while l<r:

            mid = l+(r-l)/2

            if valid(mid):

                r = mid

            else:

                l = mid+1

        return l
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: