每周一道算法題(十四)

本周題目難度級別Medium,但對于我來說是低于easy的,據(jù)說《劍指offer》中也有這道題。。。

題目:找出一組集合中的四個數(shù)贴浙,要求四個數(shù)的和等于target,不能有重復(fù)

看了題目就想到之前有一道從集合中找三個數(shù)署恍,要求等于‘0’崎溃,不能有重復(fù),我還做超時了盯质,這次的題目就是改改代碼么袁串,所以對我來說難度級別就低于easy了概而,事實上我也就用了幾分鐘就通過了這道題,雖然效率不高囱修∈旯澹可以對比著那道題一起看傳送門,下面直接上代碼:

/**
 * Return an array of arrays of size *returnSize.
 * Note: The returned array must be malloced, assume caller calls free().
 */
 //排序
 void quickSort(int* nums,int first,int end){
    int temp,l,r;
    if(first>=end)return;
    temp=nums[first];
    l=first;r=end;
    while(l<r){
        while(l<r && nums[r]>=temp)r--;
        if(l<r)nums[l]=nums[r];
        while(l<r && nums[l]<=temp)l++;
        if(l<r)nums[r]=nums[l];
    }
    nums[l]=temp;
    quickSort(nums,first,l-1);
    quickSort(nums,l+1,end);
}

int** fourSum(int* nums, int numsSize, int target, int* returnSize) {
    //給的集合個數(shù)小于4,直接返回0
    if (numsSize < 4) {
        *returnSize = 0;
        return 0;
    }
    //排序
    quickSort(nums,0,numsSize-1);
    //定義鏈表
    struct Node {
        int data[4];
        struct Node *next;
    }node;
    struct Node *head, *p, *pt;
    int len = 0;
    head = (struct Node *)malloc(sizeof(node));
    head->next = NULL;
    p = head;
    //找出符合條件的四個數(shù)破镰,并用鏈表記錄
    for (int i = 0;i < numsSize - 3;i++) {
        for (int j = i+1;j < numsSize - 2;j++) {
            if (i == j) j++;
            if  (j >= (numsSize - 2)) break;
            for (int k = j+1;k < numsSize - 1;k++) {
                while (k == i || k == j) k++;
                if (k >= (numsSize-1)) break;
                for (int l = k+1;l <numsSize;l++) {
                    while (l == i || l == j || l== k) l++;
                    if (l >= numsSize) break;
                    if (nums[i] + nums[j] + nums[k] + nums[l] == target) {
                        //記錄長度
                    len++;
                    //將排序好的組合通過鏈表記錄
                    pt = (struct Node *)malloc(sizeof(node));
                    pt->data[0] = nums[i];
                    pt->data[1] = nums[j];
                    pt->data[2] = nums[k];
                    pt->data[3] = nums[l];
                    pt->next = NULL;
                    p->next = pt;
                    p = pt;
                    }
                }
            }
        }
    }
    //刪除重復(fù)的組合
    p = head->next; 
    struct Node *pre;
    while(p != NULL) {
        pre = p;
        while(pre->next != NULL) {
            if(pre->next->data[0] == p->data[0] && pre->next->data[1] == p->data[1] && pre->next->data[2] == p->data[2]) {
                pt = pre->next; 
                pre->next = pt->next;   
                free(pt);
                len--;//記錄長度
            }else pre = pre->next;
        }
        p = p->next;
    }
    
    //將最后的結(jié)果整理返回
    *returnSize = len;
    p = head->next;
    int **returnPtr = malloc(sizeof(int*) *len);
    int x = 0;
    while (p != NULL) {
        int *arr = malloc(sizeof(int) *4);
        for (int i = 0;i < 4;i++)
            arr[i] = p->data[i];
        returnPtr[x++] = arr;
        p = p->next;
    }
    return returnPtr;
}

版權(quán)聲明:本文為 Crazy Steven 原創(chuàng)出品餐曼,歡迎轉(zhuǎn)載,轉(zhuǎn)載時請注明出處!

最后編輯于
?著作權(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)自己被綠了儿礼。 大學時的朋友給我發(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
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,321評論 25 707
  • 本周題目難度級別'Medium'菠镇,使用語言:C 題目:給你一個集合candidates和一個數(shù)字target,讓你...
    CrazySteven閱讀 636評論 0 0
  • 本周題目難度級別‘Easy’承璃,使用語言:Python 題目:給你一個集合的規(guī)則利耍,讓你找出這個集合的第N個數(shù)字。 集...
    CrazySteven閱讀 723評論 3 3
  • 我想起那個6歲的孩子盔粹,最喜歡畫hello kitty隘梨。我想起學前班時畫畫得了滿分,我想起小學時畫畫得了班上唯一一個...
    小紅依閱讀 250評論 4 5