Leetcode209题长度最小的子数组
题目
给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组。如果不存在符合条件的连续子数组,返回 0。
示例
输入: s = 7, nums = [2,3,1,2,4,3] 输出: 2 解释: 子数组 [4,3] 是该条件下的长度最小的连续子数组。
题解
本题可以采用双指针法进行求解,利用双指针维护一个滑动窗口,当窗口内的子数组和大于s时就向前移动左指针,当小于s时就向前移动右指针。
class Solution { public int minSubArrayLen(int s, int[] nums) { /* 本题利用双指针法维持一个滑动窗口,当窗口内的子数组和大于s时就移动左指针,当小于s时就移动右指针 */ int len = nums.length; int sum = 0; int left = 0; int right = 0; int result = nums.length + 1; while(right < len){ while(sum < s && right < len){ //滑动窗口子数组和大于目标值时向右滑动右指针 sum += nums[right]; right++; } while(sum >= s){ //滑动窗口子数组和小于等于目标值时,向右滑动左指针,并求解最小长度 result = Math.min(result, right - left); sum -= nums[left]; left++; } } return result == (nums.length + 1) ? 0 : result; //对特殊情况进行判断,如果s大于整个数组和就直接返回0 } }