Minimum Subarray

Given an array of integers, find the subarray with smallest sum.

Return the sum of the subarray.

Example

For [1, -1, -2, 1], return -3.

Solution

典型的贪心算法问题,思路是从数组第一个数字开始进行累加,用一个int统计最小的和(minimum sum of sub array) - 初始值为INT_MAX,用一个int统计当前的和 - 初始值为0。

int minSum = INT_MAX;

int currentSum = 0;

然后开始遍历数组,对当前遍历到的数组元素进行累加,如果累加器currentSum得到的值小于minSum,则记录currentSum为minSum。

然后判断currentSum是否为>0,如果大于0,则可以认为,从此处往前的数字都可以抹掉(为什么-贪心策略),并将currentSum重置为0,重新计数。

通过对数组循环的遍历,最后得到的minSum即为题目所求的minSubArray。

class Solution:
    """
    @param nums: a list of integers
    @return: A integer denote the sum of minimum subarray
    """
    def minSubArray(self, nums):
        # write your code here
        total, sum = sys.maxint, 0

        for num in nums:
            sum += num
            total = min(total, sum)
            sum = min(sum, 0)

        return total

Last updated

Was this helpful?