每日算法之LeetCode 209: Minimum Size Subarray Sum

LeetCode 209: Minimum Size Subarray Sum(長度最小的子數(shù)組)

Q: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 isn't one, return 0 instead.

Input: s = 7, nums = [2,3,1,2,4,3]
Output: 2
Explanation: the subarray [4,3] has the minimal length under the problem constraint.

翻譯君:
給定一個含有 n 個正整數(shù)的數(shù)組和一個正整數(shù) s ,找出該數(shù)組中滿足其和 ≥ s 的長度最小的連續(xù)子數(shù)組。如果不存在符合條件的連續(xù)子數(shù)組,返回 0媳否。

看到這個題目定躏,需要和面試官交流的問題:

1.什么是子數(shù)組梅桩。因為子數(shù)組的在不同的題目定義是不一樣的麻车,有的不一定要求是連續(xù)的元素。

2.關于一些特殊解准浴。比如沒有解返回什么,這里題目已明確說明了如果沒有滿足sum>=s的就返回0

如果有多個解是返回哪一組捎稚?這里因為返回的是長度乐横,所以只會有一個答案。如果返回的是一個子數(shù)組阳藻,就需要考慮這個問題晰奖。

當然,第一時間想到的肯定就是暴力解法了腥泥,差一點的時間復雜度O(n3)匾南,優(yōu)化一下最好可以達到O(n2)』淄猓肯定都不是我們滿足的了蛆楞。

那么有什么比較厲害的解法呢?

這里要說一個詞叫做“滑動窗口”夹厌,和之前說的“指針碰撞”有一點像豹爹。只不過這是兩個指針組成的一塊像窗口一樣的區(qū)域。只需要通過不斷移動這個窗口就可以解決這個問題了矛纹。

下圖的紅色區(qū)域就是上面所說的窗口臂聋。


minsubarray.png

關鍵在于怎么移動這個窗口解決此題呢

(1)首先區(qū)間[i,j]的定義很重要
要保證最開始的時候窗口不包含元素,很簡單,只需要將j=-1就好了

 int i=0; int j=-1;

(2)初始化的長度為數(shù)組的長度+1孩等。因為要保證在有符合條件的子數(shù)組情況下艾君,這個值初始值最好是最大值也就是數(shù)組的長度加1

(3)最后就是移動窗口了。
首先要保證窗口不越界肄方,

然后如果子數(shù)組小于目標和冰垄,右指針j右移,使窗口變大

如果子數(shù)組大于目標和权她,左指針j右移虹茶,使窗口變小

之后判斷如果子數(shù)組元素和大于目標和并且此時符合子數(shù)組的長度變小了,則取這個較小的子長度

(4)需要注意的是數(shù)組如果為空隅要,或者沒有找到符合條件的子數(shù)組蝴罪,那么就返回0。也即我的子數(shù)組長度len和初始值一樣沒有改變拾徙,返回0.

此處需要上一波完整代碼了

int minSubArrayLen(int s, vector<int>& nums) {
        int i=0; int j=-1; //保證開始的時候窗口不包含元素
        int sum=0;
        int len=nums.size()+1;  //初始化的長度為數(shù)組的長度洲炊,假設存在子數(shù)組元素和大于目標和,那么這個值肯定是最大值

        while(i<nums.size()){
          
            if(sum<s&&j+1<nums.size()) sum+=nums[++j];   //如果子數(shù)組小于目標和尼啡,右指針右移暂衡,使窗口變大
            else sum-=nums[i++];                         //如果子數(shù)組大于目標和,左指針右移崖瞭,使窗口變小

            if(sum>=s&&len>j-i+1) len=j-i+1;              //如果子數(shù)組元素和大于目標和并且此時符合子數(shù)組的長度變小了狂巢,則取這個較小的子長度
        }
        if(len==nums.size()+1)  return 0;
        return len;
    }

測試一下效率,結(jié)果還是很帥的书聚,看下圖【滑稽笑】:

image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末唧领,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子雌续,更是在濱河造成了極大的恐慌斩个,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驯杜,死亡現(xiàn)場離奇詭異受啥,居然都是意外死亡,警方通過查閱死者的電腦和手機鸽心,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門滚局,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人顽频,你說我怎么就攤上這事藤肢。” “怎么了糯景?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵嘁圈,是天一觀的道長省骂。 經(jīng)常有香客問我,道長最住,這世上最難降的妖魔是什么冀宴? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮温学,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘甚疟。我一直安慰自己仗岖,他們只是感情好,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布览妖。 她就那樣靜靜地躺著轧拄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪讽膏。 梳的紋絲不亂的頭發(fā)上檩电,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天,我揣著相機與錄音府树,去河邊找鬼俐末。 笑死,一個胖子當著我的面吹牛奄侠,可吹牛的內(nèi)容都是我干的卓箫。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼垄潮,長吁一口氣:“原來是場噩夢啊……” “哼烹卒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起弯洗,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤旅急,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后牡整,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體藐吮,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年果正,在試婚紗的時候發(fā)現(xiàn)自己被綠了炎码。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡秋泳,死狀恐怖潦闲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情迫皱,我是刑警寧澤歉闰,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布辖众,位于F島的核電站,受9級特大地震影響和敬,放射性物質(zhì)發(fā)生泄漏凹炸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一昼弟、第九天 我趴在偏房一處隱蔽的房頂上張望啤它。 院中可真熱鬧,春花似錦舱痘、人聲如沸变骡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽塌碌。三九已至,卻和暖如春旬盯,著一層夾襖步出監(jiān)牢的瞬間台妆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工胖翰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留接剩,地道東北人。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓泡态,卻偏偏與公主長得像搂漠,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子某弦,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內(nèi)容

  • 在C語言中,五種基本數(shù)據(jù)類型存儲空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 3,333評論 0 2
  • FM靠著常規(guī)時間三個點球+點球大戰(zhàn)萊諾超神拿到德國杯桐汤,然后補覺補到中午,家里人都陸續(xù)來吃年飯了靶壮。 大魚大肉過后給表...
    真晝之月閱讀 123評論 0 0
  • 自從遇見 便難忘懷 就這樣永遠的記住了 記住了 湛藍到毫無縫隙的天空 微微拂過輕柔到恰到好處的風 還有著腾降,寬廣到看...
    我叫作尋閱讀 186評論 0 0
  • 時間2017.04.05 今天很高興能再次接受采訪拣度,和大家一起分享“一張照片的故事”。以下是我接受采訪的情況: 記...
    嚴冰凝閱讀 291評論 0 0