LeetCode第209題

給定一個含有 個正整數的數組和一個正整數 s ,找出該數組中滿足其和 ≥ s 的長度最小的連續子數組如果不存在符合條件的連續子數組,返回 0。

示例: 

輸入: s = 7, nums = [2,3,1,2,4,3]
輸出: 2
解釋: 子數組 [4,3] 是該條件下的長度最小的連續子數組。

思路:這個題可以採用滑動窗口的方法來解決。

1.首先定義一個最左邊的起始位置left作爲標誌,然後遍歷數組。

2.如果和大於s,則用min記錄個數,並將left向後滑動。

3.最後如果有符合條件的min,則返回min,否則返回0.

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

有不懂的地方請在下邊留言

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章