TwoSum

題目大意:

??找到數(shù)組中兩個(gè)元素相加等于指定數(shù)的所有組合

情況一:給定數(shù)組中不含重復(fù)元素厌处,且均為正整數(shù)

思路:

??使用Hash表存儲(chǔ)數(shù)組各元素是否存在的標(biāo)志行瑞,然后遍歷數(shù)組叹阔,判斷sum與當(dāng)前數(shù)組元素的差值是否在hash表中截酷。時(shí)間復(fù)雜度為O(n),空間復(fù)雜度為O(n)蔓同。

代碼實(shí)現(xiàn):
 private static List<List<Integer>> execute1(int[] array, int m) {
        List<List<Integer>> rst = new ArrayList<>();
        List<Integer> subList = new ArrayList<>();
        int size = array.length;
        int hash[] = new int[size];
        for(int i = 0; i < size; i++) {
            hash[array[i]%size] = 1;
        }

        for(int i = 0; i < size; i++) {
            int tmp = m - array[i];
            if((tmp > array[i]) && (hash[tmp%size] == 1)){
                subList.clear();
                subList.add(array[i]);
                subList.add(tmp);
                rst.add(new ArrayList<>(subList));
            }


        }
        return rst;
    }

情況二:給定數(shù)組是有序的

思路:

??遍歷數(shù)組饶辙,判斷sum與數(shù)組元素的差值是否在數(shù)組中,由于數(shù)組有序可以采用二分查找的方法斑粱。二分查找的時(shí)間復(fù)雜度為O(logn),查找n次弃揽,總的時(shí)間復(fù)雜度為O(nlogn),避免了空間的浪費(fèi)

代碼實(shí)現(xiàn):
  private static  List<List<Integer>> execute2(int[] array, int m) {
        List<List<Integer>> rst = new ArrayList<>();
        List<Integer> subList = new ArrayList<>();
        for(int i = 0; i < array.length; i++) {
            int tmp = m - array[i];
            if (tmp > array[i]) {
                if (binarySearch(array, tmp) != -1) {
                    subList.clear();
                    subList.add(array[i]);
                    subList.add(tmp);
                    rst.add(new ArrayList<>(subList));
                }
            }
        }
        return rst;
    }
    private static int binarySearch(int[] array, int key) {
        if (array.length == 0) {
            return -1;
        }

        int first = 0;
        int last = array.length -1;

        int mid;
        while(first <= last) {
            mid = (first + last) / 2;
            if (array[mid] == key) {
                return mid;
            } else if (array[mid] < key) {
                first = mid + 1;
            } else {
                last = mid -1;
            }
        }
        return -1;
    }

情況三:給定數(shù)組是有序的

思路:

??使用兩個(gè)指針则北,分別指向最后一個(gè)元素和第一個(gè)元素矿微,判斷它們的和是否等于sum,若等于則添加到返回鏈表尚揣,并且first向后移動(dòng)涌矢,last向前移動(dòng);若它們的和小于sum快骗,則說明first太小了娜庇,需要first向后移動(dòng)塔次;若它們的和大于sum,則說明last太大了名秀,需要last向前移動(dòng)俺叭,直到last>=first。時(shí)間復(fù)雜度為O(n)

代碼實(shí)現(xiàn):
 private static List<List<Integer>> execute3(int[] array, int m) {
        List<List<Integer>> rst = new ArrayList<>();
        List<Integer> subList = new ArrayList<>();
        int first = 0;
        int last = array.length -1;
        int sum = 0;
        while(first < last ) {
            sum = array[first] + array[last];
            if (sum == m) {
                subList.clear();
                subList.add(array[first]);
                subList.add(last);
                rst.add(new ArrayList<>(subList));
                first++;
                last--;
            } else if (sum < m) {
                first++;
            } else {
                last--;
            }
        }
        return rst;
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末泰偿,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蜈垮,更是在濱河造成了極大的恐慌耗跛,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件攒发,死亡現(xiàn)場(chǎng)離奇詭異调塌,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)惠猿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門羔砾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人偶妖,你說我怎么就攤上這事姜凄。” “怎么了趾访?”我有些...
    開封第一講書人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵态秧,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我扼鞋,道長(zhǎng)申鱼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任云头,我火速辦了婚禮捐友,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘溃槐。我一直安慰自己匣砖,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開白布昏滴。 她就那樣靜靜地躺著脆粥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪影涉。 梳的紋絲不亂的頭發(fā)上变隔,一...
    開封第一講書人閱讀 51,488評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音蟹倾,去河邊找鬼匣缘。 笑死猖闪,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的肌厨。 我是一名探鬼主播培慌,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼柑爸!你這毒婦竟也來了吵护?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤表鳍,失蹤者是張志新(化名)和其女友劉穎馅而,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體譬圣,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瓮恭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了厘熟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片屯蹦。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖绳姨,靈堂內(nèi)的尸體忽然破棺而出登澜,到底是詐尸還是另有隱情,我是刑警寧澤飘庄,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布帖渠,位于F島的核電站,受9級(jí)特大地震影響竭宰,放射性物質(zhì)發(fā)生泄漏空郊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一切揭、第九天 我趴在偏房一處隱蔽的房頂上張望狞甚。 院中可真熱鬧,春花似錦廓旬、人聲如沸哼审。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涩盾。三九已至,卻和暖如春励背,著一層夾襖步出監(jiān)牢的瞬間春霍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工叶眉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留址儒,地道東北人芹枷。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像莲趣,于是被迫代替她去往敵國(guó)和親鸳慈。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

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