15.三數(shù)之和

給定一個(gè)包含 n 個(gè)整數(shù)的數(shù)組 nums部翘,判斷 nums 中是否存在三個(gè)元素 a,b响委,c 新思,使得 a + b + c = 0 ?找出所有滿足條件且不重復(fù)的三元組赘风。

注意:答案中不可以包含重復(fù)的三元組夹囚。

例如, 給定數(shù)組 nums = [-1, 0, 1, 2, -1, -4],
滿足要求的三元組集合為:
[
[-1, 0, 1],
[-1, -1, 2]
]

想不到除了暴力更好的方法邀窃,于是參考了這篇博客《LeetCode 15. 三數(shù)之和(3Sum)》

首先對(duì)數(shù)組排序荸哟,然后依次遍歷數(shù)組元素。
第一個(gè)元素必須為負(fù)數(shù)或0瞬捕,這樣才可能三數(shù)相加為0鞍历。
然后對(duì)后續(xù)元素采用雙指針移動(dòng)的方法,不斷移動(dòng)肪虎,找出所有解劣砍。
但雙指針移動(dòng)的時(shí)候,可能會(huì)導(dǎo)致出現(xiàn)重復(fù)解扇救。我通過添加了一些while循環(huán)刑枝,每次剔重

這篇博客引用了一個(gè)新的變量,用來存儲(chǔ)上一次的第二個(gè)數(shù)字的大小爵政,如此一來只需要簡單判斷就可以完成仅讽。確實(shí)比較巧妙。

我的具體代碼:

#include<vector>
#include<ctype.h>
#include<stdio.h>
#include<cstdio>
#include<string>
#include<iostream>
#include<algorithm>
//為了sort函數(shù)引入

using namespace std;

vector< vector<int> > threeSum(vector<int>& nums) {
    vector<vector<int> > res;
    if(nums.size() < 3){
        return res;
    }
    
    
    vector<int> vec;
    sort(nums.begin(), nums.end());
    
    for(int i = 0; i < nums.size() - 2;){
        if(nums[i] <= 0){
            int target = 0 - nums[i];
            int left = i + 1;
            int right = nums.size() - 1;
            while(left < right){
                cout << "left:" << left << " ri:" << right << endl;
                if(nums[left] + nums[right] == target){
                    vec.push_back(nums[i]);
                    vec.push_back(nums[left]);
                    vec.push_back(nums[right]);
                    res.push_back(vec);
                    vec.pop_back();
                    vec.pop_back();
                    vec.pop_back();
                    cout << "yeah! 1:" << i << " 2:" << left << " 3:" << right << endl;
                    left++;
                    right--;
                    while(left < right && nums[left] == nums[left - 1]){
                        left++;
                    }
                    while(left < right && nums[right] == nums[right + 1]){
                        right--;
                    }
                }
                else if(nums[left] + nums[right] < target){
                    left++;
                    while(left < right && nums[left] == nums[left - 1]){
                        left++;
                    }
                }
                else{
                    right--;
                    while(left < right && nums[right] == nums[right + 1]){
                        right--;
                    }
                }
            }
            
        }
        i++;
        while(i < nums.size() - 2 && nums[i] == nums[i-1]){
            i++;
        }
    }
    
    return res;
}

int main(){
    int a[10] = {-1,0,1,2,-1,-4};
    vector<int> nums(a,a+6);
    vector<vector<int> > res = threeSum(nums);
    return 0;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末钾挟,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子饱岸,更是在濱河造成了極大的恐慌掺出,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件苫费,死亡現(xiàn)場(chǎng)離奇詭異汤锨,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)百框,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門闲礼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事柬泽∩鞣疲” “怎么了?”我有些...
    開封第一講書人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵锨并,是天一觀的道長露该。 經(jīng)常有香客問我,道長第煮,這世上最難降的妖魔是什么解幼? 我笑而不...
    開封第一講書人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮包警,結(jié)果婚禮上撵摆,老公的妹妹穿的比我還像新娘。我一直安慰自己害晦,他們只是感情好台汇,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著篱瞎,像睡著了一般苟呐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上俐筋,一...
    開封第一講書人閱讀 51,604評(píng)論 1 305
  • 那天牵素,我揣著相機(jī)與錄音,去河邊找鬼澄者。 笑死笆呆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的粱挡。 我是一名探鬼主播赠幕,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼询筏!你這毒婦竟也來了榕堰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤嫌套,失蹤者是張志新(化名)和其女友劉穎逆屡,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體踱讨,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡魏蔗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了痹筛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片莺治。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡廓鞠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谣旁,到底是詐尸還是另有隱情床佳,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布蔓挖,位于F島的核電站夕土,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏瘟判。R本人自食惡果不足惜怨绣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拷获。 院中可真熱鬧篮撑,春花似錦、人聲如沸匆瓜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽驮吱。三九已至茧妒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間左冬,已是汗流浹背桐筏。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拇砰,地道東北人梅忌。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像除破,于是被迫代替她去往敵國和親牧氮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355

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