LintCode: Minimum Size Subarray Sum

Given an array of n positive integers and a positive integer s, find the minimal length of a subarray of which the sum ≥ s. If there isn't one, return -1 instead.

思路: 本题以two pointer的方法解可得O(N)的solution, 分别用两个pointer代表start和end元素, 当当前的和大于目标时, start向前移动, 当当前的和小于目标时, end向前移动. 时刻更新最小size值. 注意提前处理返回-1的情况.

class Solution:
     # @param nums: a list of integers
     # @param s: an integer
     # @return: an integer representing the minimum size of subarray
    def minimumSize(self, nums, s):
        # write your code here
        if not nums or sum(nums)<s: 
            return -1
        if nums[0] >= s:
            return 1
        else:
            _min = len(nums)
        start, end = 0, 0
        cur = nums[0]
        while end < len(nums):
            if cur < s:
                end += 1
                if end<len(nums):
                    cur+=nums[end]
            else:
                if end-start+1<_min:
                    _min = end-start+1
                start+=1
                cur-=nums[start-1]
        return _min
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容