15. 3Sum

題目描述:給定一個有n個整數(shù)的數(shù)組S憾赁,找到其中所有由三個數(shù)a、b、c組成弯蚜,使得a + b + c = 0的三元組。如:

given array S = [-1, 0, 1, 2, -1, -4],
A solution set is:
[
[-1, 0, 1], [-1, -1, 2]
]

分析:3個數(shù)的和為定值剃法,三重循環(huán)肯定可以解決碎捺,但復(fù)雜度太高〈蓿可以先排序收厨,然后在一遍遍歷中兩邊夾。時間復(fù)雜度O(n^2)优构,空間O(1)诵叁。這個思路可推廣到k-sum,都是先排序钦椭,然后 k - 2 層循環(huán)拧额,最里面再加層左右夾逼的循環(huán),復(fù)雜度O( max{nlgn, n^(k - 1)} )彪腔。

代碼

class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& num) {
        vector<vector<int> > v;      //解不止一個侥锦,要記錄所有的三元組  
        if(num.size() == 0)
            return v;
         
        sort(num.begin(), num.end());
        
        for(int i = 0; i < num.size() - 2 && num[i] <= 0;  i ++ )          //因為目標值是0,所以每個三元組至少有一個負數(shù)德挣,故只用遍歷負數(shù)即可
        {
            if(i > 0 && num[i] == num[i - 1])           // 跳過重復(fù)元素
                continue;
            
            int l = i + 1, r = num.size() - 1;         //保證三個數(shù)不是同一個數(shù)的的前提下的查找最大范圍
            while(l < r)
            {
                if(num[l] + num[r] == 0 - num[i])
                {
                     v.push_back({num[i], num[l], num[r]});
                     //每次找到后分別略過左右兩邊的重復(fù)元素
                    while(++ l < r && num[l] == num[l - 1]);                     // 跳過重復(fù)元素
                    while(l < -- r && num[r] == num[r + 1]); // 跳過重復(fù)元素
                 }
                 else if(num[l] + num[r] > 0 - num[i])        //兩數(shù)和偏大恭垦,右指針往小移
                    -- r;
                 else        //兩數(shù)和偏小,左指針往大移
                     ++ l;
             }
         }
         
         return v;
    }
};
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市番挺,隨后出現(xiàn)的幾起案子唠帝,更是在濱河造成了極大的恐慌,老刑警劉巖建芙,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件没隘,死亡現(xiàn)場離奇詭異,居然都是意外死亡禁荸,警方通過查閱死者的電腦和手機右蒲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赶熟,“玉大人瑰妄,你說我怎么就攤上這事∮匙” “怎么了间坐?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長邑退。 經(jīng)常有香客問我竹宋,道長,這世上最難降的妖魔是什么地技? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任蜈七,我火速辦了婚禮,結(jié)果婚禮上莫矗,老公的妹妹穿的比我還像新娘飒硅。我一直安慰自己,他們只是感情好作谚,可當我...
    茶點故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布三娩。 她就那樣靜靜地躺著,像睡著了一般妹懒。 火紅的嫁衣襯著肌膚如雪雀监。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天眨唬,我揣著相機與錄音会前,去河邊找鬼。 笑死单绑,一個胖子當著我的面吹牛回官,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播搂橙,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼歉提,長吁一口氣:“原來是場噩夢啊……” “哼笛坦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起苔巨,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤版扩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后侄泽,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體礁芦,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年悼尾,在試婚紗的時候發(fā)現(xiàn)自己被綠了柿扣。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡闺魏,死狀恐怖未状,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情析桥,我是刑警寧澤司草,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站泡仗,受9級特大地震影響埋虹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜娩怎,卻給世界環(huán)境...
    茶點故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一搔课、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧峦树,春花似錦辣辫、人聲如沸旦事。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽姐浮。三九已至谷遂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間卖鲤,已是汗流浹背肾扰。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蛋逾,地道東北人集晚。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像区匣,于是被迫代替她去往敵國和親偷拔。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,781評論 2 361

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

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗。 張土汪:刷leetcod...
    土汪閱讀 12,748評論 0 33
  • 第二次參加成長訓(xùn)練營莲绰,相比第一次的默默無聞欺旧,忙亂。這一次蛤签,是有備而來辞友。帶著自己的“沒有,就去創(chuàng)造”的實踐震肮,在成長訓(xùn)...
    蘆薈加冰閱讀 488評論 0 2
  • 之前也處理過android方法數(shù)超出65536的問題称龙,不過當時著急,沒有采用分包的解決方式戳晌,直接在需要使用到...
    毛神閱讀 5,605評論 9 1
  • 在朋友圈發(fā)了深夜食堂之烤生蠔的照片茵瀑,簡直圈粉無數(shù),好評如潮躬厌。有個朋友居然十分用心評論到马昨,生蠔簡直是生命之光啊。我深...
    林妖妖的盛夏光年閱讀 648評論 39 26
  • 感賞兒子完成一天的學(xué)習(xí)扛施,兒子辛苦了鸿捧。晚上回來情緒很平穩(wěn),又和提起買手機的事疙渣,我依然是昨晚的態(tài)度匙奴,溫和而堅定的...
    金色陽光魏艷春閱讀 256評論 0 0