赞
踩
题目:
给定一个含有 n
个正整数的数组和一个正整数 target
。
找出该数组中满足其总和大于等于 target
的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr]
,并返回其长度。如果不存在符合条件的子数组,返回 0
。
解法【滑动窗口】:
- class Solution {
- public int minSubArrayLen(int target, int[] nums) {
- int left = 0;
- int sum = 0;
- int result = Integer.MAX_VALUE;
- for (int right = 0; right < nums.length; right++) {
- sum += nums[right];
- while (sum >= target) {
- result = Math.min(result, right - left + 1);
- sum -= nums[left++];
- }
- }
- return result == Integer.MAX_VALUE ? 0 : result;
- }
- }
将result设置为Integer.MAX_VALUE的目的是为了确保在遍历过程中能够正确地更新result的值。在最后返回结果时,如果result仍然保持为Integer.MAX_VALUE,则说明不存在满足条件的子数组,返回0;否则返回找到的最小子数组长度。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。