摘要:雙指針復(fù)雜度時(shí)間空間思路我們用兩個(gè)指針維護(hù)一個(gè)窗口,保證這個(gè)窗口的內(nèi)的和是小于目標(biāo)數(shù)的。如果和仍小于目標(biāo)數(shù),則將窗口右邊界右移。另外,如果左邊界大于右邊界時(shí),說(shuō)明最短子串的長(zhǎng)度已經(jīng)小于等于,我們就不用再查找了。
Minimum Size Subarray Sum
雙指針 復(fù)雜度Given an array of n positive integers and a positive integer s, find the minimal length of a subarray of which the sum ≥ s. If there isn"t one, return 0 instead.
For example, given the array [2,3,1,2,4,3] and s = 7, the subarray [4,3] has the minimal length under the problem constraint.
時(shí)間 O(N) 空間 O(1)
思路我們用兩個(gè)指針維護(hù)一個(gè)窗口,保證這個(gè)窗口的內(nèi)的和是小于目標(biāo)數(shù)的。如果新來(lái)的數(shù)加上后,和大于目標(biāo),則比較下當(dāng)前窗口長(zhǎng)度和最短窗口長(zhǎng)度,窗口左邊界右移。如果和仍小于目標(biāo)數(shù),則將窗口右邊界右移。注意這里退出的條件,右邊界是小于等于長(zhǎng)度,因?yàn)槲覀兇翱诘搅俗钣覀?cè)時(shí),還需要繼續(xù)左移左邊界來(lái)看有沒(méi)有更優(yōu)的解法。另外,如果左邊界大于右邊界時(shí),說(shuō)明最短子串的長(zhǎng)度已經(jīng)小于等于1,我們就不用再查找了。
注意循環(huán)的判斷條件是right <= nums.length && left <= right
代碼public class Solution { public int minSubArrayLen(int s, int[] nums) { if(nums.length == 0) return 0; int left = 0, right = 0, sum = 0, minLen = nums.length + 1; while(right <= nums.length && left <= right){ if(sum < s){ // 當(dāng)右邊界等于長(zhǎng)度時(shí),我們要多等一輪,等待左邊界左移,這時(shí)候不能加 if(right < nums.length){ sum += nums[right]; } right++; } else { // 當(dāng)和大于等于目標(biāo)時(shí),檢查長(zhǎng)度并左移邊界 minLen = Math.min(minLen, right - left); sum -= nums[left]; left++; } } return minLen <= nums.length ? minLen : 0; } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/66174.html
Problem Given an array of n positive integers and a positive integer s, find the minimal length of a contiguous subarray of which the sum ≥ s. If there isnt one, return 0 instead. Example: Input: s =...
摘要:如果不存在符合條件的連續(xù)子數(shù)組,返回。示例輸入輸出解釋子數(shù)組是該條件下的長(zhǎng)度最小的連續(xù)子數(shù)組。截取從索引到索引的數(shù)組,該數(shù)組之和若小于,則繼續(xù)后移,直到大于等于。記錄與差值返回的目標(biāo)數(shù)。之后后移一位繼續(xù)刷新新數(shù)組。 公眾號(hào): 愛(ài)寫(xiě)bug(ID:icodebugs)作者:愛(ài)寫(xiě)bug 給定一個(gè)含有 n 個(gè)正整數(shù)的數(shù)組和一個(gè)正整數(shù) s ,找出該數(shù)組中滿(mǎn)足其和 ≥ s 的長(zhǎng)度最小的連續(xù)子數(shù)組...
摘要:如果不存在符合條件的連續(xù)子數(shù)組,返回。示例輸入輸出解釋子數(shù)組是該條件下的長(zhǎng)度最小的連續(xù)子數(shù)組。截取從索引到索引的數(shù)組,該數(shù)組之和若小于,則繼續(xù)后移,直到大于等于。記錄與差值返回的目標(biāo)數(shù)。之后后移一位繼續(xù)刷新新數(shù)組。 公眾號(hào): 愛(ài)寫(xiě)bug(ID:icodebugs)作者:愛(ài)寫(xiě)bug 給定一個(gè)含有 n 個(gè)正整數(shù)的數(shù)組和一個(gè)正整數(shù) s ,找出該數(shù)組中滿(mǎn)足其和 ≥ s 的長(zhǎng)度最小的連續(xù)子數(shù)組...
摘要:如果不存在符合條件的連續(xù)子數(shù)組,返回。示例輸入輸出解釋子數(shù)組是該條件下的長(zhǎng)度最小的連續(xù)子數(shù)組。截取從索引到索引的數(shù)組,該數(shù)組之和若小于,則繼續(xù)后移,直到大于等于。記錄與差值返回的目標(biāo)數(shù)。之后后移一位繼續(xù)刷新新數(shù)組。 算法是一個(gè)程序的靈魂 公眾號(hào):愛(ài)寫(xiě)bug(ID:icodebugs)作者:愛(ài)寫(xiě)bug 給定一個(gè)含有 n 個(gè)正整數(shù)的數(shù)組和一個(gè)正整數(shù) s ,找出該數(shù)組中滿(mǎn)足其和 ≥ s 的...
摘要:如果不存在符合條件的連續(xù)子數(shù)組,返回。示例輸入輸出解釋子數(shù)組是該條件下的長(zhǎng)度最小的連續(xù)子數(shù)組。截取從索引到索引的數(shù)組,該數(shù)組之和若小于,則繼續(xù)后移,直到大于等于。記錄與差值返回的目標(biāo)數(shù)。之后后移一位繼續(xù)刷新新數(shù)組。 算法是一個(gè)程序的靈魂 公眾號(hào):愛(ài)寫(xiě)bug(ID:icodebugs)作者:愛(ài)寫(xiě)bug 給定一個(gè)含有 n 個(gè)正整數(shù)的數(shù)組和一個(gè)正整數(shù) s ,找出該數(shù)組中滿(mǎn)足其和 ≥ s 的...
閱讀 2441·2021-10-14 09:43
閱讀 2480·2021-09-09 09:34
閱讀 1627·2019-08-30 12:57
閱讀 1231·2019-08-29 14:16
閱讀 749·2019-08-26 12:13
閱讀 3226·2019-08-26 11:45
閱讀 2316·2019-08-23 16:18
閱讀 2691·2019-08-23 15:27