其他分享
首页 > 其他分享> > leetcode209 长度最小的子数组

leetcode209 长度最小的子数组

作者:互联网

方法一:暴力,两层for循环——会超时

Python
class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        result = len(nums) + 1
        for i in range(len(nums)):
            temp = 0
            for j in range(i, len(nums)):
                temp += nums[j]
                if temp < target:
                    continue
                else:
                    result = min(result, j - i + 1)
                    break

        if result == len(nums) + 1:
            return 0
        return result
Java
class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        int result = nums.length + 1;
        for (int i = 0; i < nums.length; i++) {
            int temp = 0;
            for (int j = i; j < nums.length; j++) {
                temp += nums[j];
                if (temp < target) {
                    continue;
                } else {
                    result = Math.min(result, j - i + 1);
                    break;
                }
            }
        }
        if (result == nums.length + 1) {
            return 0;
        } else {
            return result;
        }
    }
}

方法二:滑动窗口

窗口端点的移动方式:

Python
class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        left = 0
        right = 0
        result = len(nums) + 1
        sum_temp = nums[0]
        while left < len(nums) or right < len(nums):
            if sum_temp >= target:
                result = min(result, right -left + 1)
                sum_temp -= nums[left]
                left += 1
            else:
                right += 1
                if right == len(nums):
                    break
                sum_temp += nums[right]
            if result == 1:
                return result

        if result == len(nums) + 1:
            return 0
        return result
Java
class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        int left = 0;
        int right = 0;
        int result = nums.length + 1;
        int sum_temp = nums[0];

        while (left < nums.length || right < nums.length) {
            if (sum_temp >= target) {
                result = Math.min(result, right - left + 1);
                sum_temp -= nums[left];
                left++;
            }else {
                right ++;
                if (right == nums.length) {
                    break;
                }
                sum_temp += nums[right];
            }
            if (result == 1) {
                return 1;
            }
        }
        if (result == nums.length + 1) {
            return 0;
        }
        return result;
    }
}

标签:right,return,temp,nums,int,result,数组,leetcode209,长度
来源: https://www.cnblogs.com/waitting975/p/16398680.html