本地的佛山網(wǎng)站建設(shè)南寧網(wǎng)絡(luò)推廣服務(wù)商
給定一個正整數(shù)數(shù)組,找到大于等于s的連續(xù)的最小長度的區(qū)間。
解法一:暴力解法
? ? ? ? 兩層for循環(huán),一個區(qū)間終止位置,一個區(qū)間起始位置,找到大于等于s的最小區(qū)間長度(超時了)
解法二:雙指針,滑動窗口
? ? ? ? 思路:一個for循環(huán)完成兩個for循環(huán)操作,for(j……),其中的j指的是終止位置,起始位置用動態(tài)移動策略移動。當(dāng)終止位置移動后,集合里的元素和大于等于s時,起始位置開始向后移動,來縮小當(dāng)前集合。此時動態(tài)的去調(diào)整起始位置來收集不同區(qū)間里的和。
? ? ? ? ? ? ? ? 重點:如何移動起始位置
class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int result = INT32_MAX;int sum = 0;int i = 0;int subl = 0;for(int j = 0; j < nums.size(); j++){ sum += nums[j];while(sum >= target){subl = j - i + 1;result = result < subl ? result : subl;sum -= nums[i];i++;}}return result == INT32_MAX ? 0 : result;}
};