Leetcode 18. 4Sum

題目

Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target.
Note:
The solution set must not contain duplicate quadruplets.

For example, given array S = [1, 0, -1, 0, -2, 2], and target = 0.
A solution set is:
[
[-1, 0, 0, 1],
[-2, -1, 1, 2],
[-2, 0, 0, 2]
]

分析:

這個題的思想和尋找三個數(shù)相加是相同的行施,先確定兩個數(shù)璧榄,然后對剩下的兩個數(shù)從首尾依次尋找册踩,直至找到合適的施禾。
當(dāng)然數(shù)組需要先排序拗胜。如果相同的四元組表制,就不能添加到結(jié)果中撩炊,并且free掉相關(guān)的內(nèi)存

/**
 * Return an array of arrays of size *returnSize.
 * Note: The returned array must be malloced, assume caller calls free().
 */
void sort(int *a, int left, int right)
{
    if(left >= right)/*如果左邊索引大于或者等于右邊的索引就代表已經(jīng)整理完成一個組了*/
    {
        return ;
    }
    int i = left;
    int j = right;
    int key = a[left];
     
    while(i < j)                               /*控制在當(dāng)組內(nèi)尋找一遍*/
    {
        while(i < j && key <= a[j])
        /*而尋找結(jié)束的條件就是放仗,1抑党,找到一個小于或者大于key的數(shù)(大于或小于取決于你想升
        序還是降序)2包警,沒有符合條件1的,并且i與j的大小沒有反轉(zhuǎn)*/ 
        {
            j--;/*向前尋找*/
        }
         
        a[i] = a[j];
        /*找到一個這樣的數(shù)后就把它賦給前面的被拿走的i的值(如果第一次循環(huán)且key是
        a[left]底靠,那么就是給key)*/
         
        while(i < j && key >= a[i])
        /*這是i在當(dāng)組內(nèi)向前尋找害晦,同上,不過注意與key的大小關(guān)系停止循環(huán)和上面相反暑中,
        因為排序思想是把數(shù)往兩邊扔壹瘟,所以左右兩邊的數(shù)大小與key的關(guān)系相反*/
        {
            i++;
        }
         
        a[j] = a[i];
    }
     
    a[i] = key;/*當(dāng)在當(dāng)組內(nèi)找完一遍以后就把中間數(shù)key回歸*/
    sort(a, left, i - 1);/*最后用同樣的方式對分出來的左邊的小組進(jìn)行同上的做法*/
    sort(a, i + 1, right);/*用同樣的方式對分出來的右邊的小組進(jìn)行同上的做法*/
                       /*當(dāng)然最后可能會出現(xiàn)很多分左右,直到每一組的i = j 為止*/
}
int** fourSum(int* nums, int numsSize, int target, int* returnSize) {
    int** ans=(int **)malloc(sizeof(int *)*100000);
    *returnSize=0;
    sort(nums,0,numsSize-1);
    for(int i=0;i<numsSize;i++)
    {
        for(int j=i+1;j<numsSize;j++)
        {
            int p=j+1,q=numsSize-1;
            while(p<q)
            {
                if(nums[i]+nums[j]+nums[p]+nums[q]<target)
                    p++;
                else if(nums[i]+nums[j]+nums[p]+nums[q]>target)
                    q--;
                else if(nums[i]+nums[j]+nums[p]+nums[q]==target)
                {
                    int *temp=(int *)malloc(sizeof(int)*4);
                    temp[0]=nums[i];
                    temp[1]=nums[j];
                    temp[2]=nums[p];
                    temp[3]=nums[q];
                    sort(temp,0,3);
                    int k=0;
                    for(k=0;k<*returnSize;k++)
                    {
                        if(ans[k][0]==temp[0]&&ans[k][1]==temp[1]&&ans[k][2]==temp[2]&&ans[k][3]==temp[3])
                            break;
                    }
                    if(k==*returnSize)
                    {
                        ans[*returnSize]=temp;
                        *returnSize=*returnSize+1;
                    }
                    else
                        free(temp);
                    p++;
                }
            }
        }
    }
    //printf("%d\n",*returnSize);
    return ans;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末痒芝,一起剝皮案震驚了整個濱河市俐筋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌严衬,老刑警劉巖澄者,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異请琳,居然都是意外死亡粱挡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進(jìn)店門俄精,熙熙樓的掌柜王于貴愁眉苦臉地迎上來询筏,“玉大人,你說我怎么就攤上這事竖慧∠犹祝” “怎么了逆屡?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長踱讨。 經(jīng)常有香客問我魏蔗,道長,這世上最難降的妖魔是什么痹筛? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任莺治,我火速辦了婚禮,結(jié)果婚禮上帚稠,老公的妹妹穿的比我還像新娘谣旁。我一直安慰自己,他們只是感情好滋早,可當(dāng)我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布榄审。 她就那樣靜靜地躺著,像睡著了一般杆麸。 火紅的嫁衣襯著肌膚如雪瘟判。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天角溃,我揣著相機與錄音,去河邊找鬼篮撑。 笑死减细,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的赢笨。 我是一名探鬼主播未蝌,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼茧妒!你這毒婦竟也來了萧吠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤桐筏,失蹤者是張志新(化名)和其女友劉穎纸型,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體梅忌,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡狰腌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了牧氮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片琼腔。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖踱葛,靈堂內(nèi)的尸體忽然破棺而出丹莲,到底是詐尸還是另有隱情光坝,我是刑警寧澤,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布甥材,位于F島的核電站盯另,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏擂达。R本人自食惡果不足惜土铺,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望板鬓。 院中可真熱鬧悲敷,春花似錦、人聲如沸俭令。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽抄腔。三九已至瓢湃,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間赫蛇,已是汗流浹背绵患。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留悟耘,地道東北人落蝙。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像暂幼,于是被迫代替她去往敵國和親筏勒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,492評論 2 348

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