其他分享
首页 > 其他分享> > 【LeetCode---209】长度最小的子数组---滑动窗口

【LeetCode---209】长度最小的子数组---滑动窗口

作者:互联网

【LeetCode---209】长度最小的子数组---滑动窗口

声明:跟着Carl哥学的,欢迎关注代码随想录。

地址:https://www.programmercarl.com/

1、题干

image-20211104182743409

image-20211104182804186

2、滑动窗口思想

3、滑动窗口需要确定的点

4、Java代码实现

class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        //这里的初始值设置的小技巧
        int result = Integer.MAX_VALUE;
        int sum = 0;//滑动窗口的数值之和
        int i = 0;//滑动窗口的起始位置
        int subLength = 0;//滑动窗口的长度
        for (int j=0;j < nums.length;j++){
            sum += nums[j];
            //注意这里要使用while,每次更新i的位置
            while(sum >= target){
                subLength = (j - i + 1);//取子序列的长度
                result = result < subLength ? result : subLength;
                sum -= nums[i];//窗口移动之后,总体的值变小,减去最左边的那个值。
                i++;//窗口缩小
            }
        }
        
        //如果没有符合条件的就返回0
        return result == Integer.MAX_VALUE ? 0 :result;
    }
}

时间复杂度还是O(n),主要看每一个元素被操作的次数,每个元素在滑动窗口进来后操作一次,出去操作一次,每个元素都是被操作两次,所以时间复杂度是2n,也就是O(n)。

标签:窗口,209,位置,起始,---,int,result,滑动,LeetCode
来源: https://www.cnblogs.com/darkerg/p/15509670.html