• 数组 滑动窗口


    题目

    LeetCode 209. 长度最小的子数组

    给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。
    
     
    
    示例:
    
    输入:s = 7, nums = [2,3,1,2,4,3]
    输出:2
    解释:子数组 [4,3] 是该条件下的长度最小的子数组。
     
    
    进阶:
    
    如果你已经完成了 O(n) 时间复杂度的解法, 请尝试 O(n log n) 时间复杂度的解法。
    
    

    解题思路与算法

    滑动窗口法

    代码

    class Solution {
        	public int minSubArrayLen(int s, int[] nums) {
    		int i=0;//起始位置
    		int result=Integer.MAX_VALUE;
    		int sublength = 0;//滑动窗口的长度
    		int sum = 0;
    		for(int j=0;j<nums.length;j++) {
    			sum+=nums[j];
    			while(sum>=s) {
    				sublength = j-i+1;
    				result=result<sublength?result:sublength;
    				sum-=nums[i++];//这里体现出滑动窗口的精髓之处,不断变更i(子序列的起始位置)
    			}
    			
    		}
            // 如果result没有被赋值的话,就返回0,说明没有符合条件的子序列
    		return result==Integer.MAX_VALUE?0:result;
        }
    }
    
  • 相关阅读:
    9.17
    9.14
    9.13
    9.13
    9.11
    9.28
    10 .19 知识点
    redux
    react路由
    react的三大属性
  • 原文地址:https://www.cnblogs.com/nmydt/p/14494026.html
Copyright © 2020-2023  润新知