leetcode 长度最小的子数组

给定一个含有 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组如果不存在符合条件的连续子数组,返回 0。

示例: 

输入: s = 7, nums = [2,3,1,2,4,3]输出: 2
解释: 子数组 [4,3]
 是该条件下的长度最小的连续子数组。

双指针法解决,先从零开始累加sum,先保证sum >= s ,再确定这其中是否有连续和为s的子数组,这样的话就需要low指针向前逐步夹逼,同时更新子数组长度min。

综述:

  每次都是在处理[0,high]的子数组,同时每次判断sum>=s的情况下,low向前夹逼。

class Solution {
    public int minSubArrayLen(int s, int[] nums) {
        int low=0;
		int min=Integer.MAX_VALUE;
		int sum=0;
		for (int high = 0; high < nums.length; high++) {
			sum+=nums[high];
			while(sum>=s){
				min=Math.min(min, high-low+1);
				sum-=nums[low++];
			}
		}
        return (min!=Integer.MAX_VALUE)? min:0;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_39020387/article/details/85763686