1. 兩數(shù)之和

題目描述

思路

分兩種:排序之后從兩邊向中間遍歷赐稽;哈希表

排序

為了能夠排完序之后保留下標(biāo)信息,需要新定義一個類浑侥。在類中保留數(shù)字和對應(yīng)下標(biāo)姊舵,并實(shí)現(xiàn)Compareble接口,重寫compareTo方法寓落,注意在compareTo方法中只對數(shù)字進(jìn)行比較括丁,而下標(biāo)不參與比較。我把這個類定義為Data伶选。

定義完這個類之后史飞,由所給數(shù)組(nums)新建一個Data數(shù)組尖昏。然后調(diào)用Arrays.sort()對Data數(shù)組進(jìn)行排序。從數(shù)組的兩端(頭指針pre祸憋,尾指針post)向中間逼近会宪,尋找加和等于target的兩個數(shù)。

在尋找的過程中蚯窥,若pre和post指向的兩個數(shù)相加小于target掸鹅,則pre加1;若大于target拦赠,則post-1巍沙;若等于target,退出循環(huán)并返回結(jié)果荷鼠。

java代碼如下:

import java.util.Arrays;

class Solution {
    public class Data implements Comparable {
        int index;
        int data;

        Data(int index, int data) {
            this.data = data;
            this.index = index;
        }

        @Override
        public int compareTo(Object o) {
            if (o instanceof Data) {
                Data s = (Data) o;
                if (this.data > s.data)
                    return 1;
                else if (this.data == s.data)
                    return 0;
                else
                    return -1;
            }
            return 0;
        }
    }

    public int[] twoSum(int[] nums, int target) {
        int length = nums.length;
        int pre = 0;
        int post = length - 1;
        int sum = 0;

        Data[] datas = new Data[length];
        for (int i = 0; i < length; i++)
            datas[i] = new Data(i, nums[i]);

        Arrays.sort(datas);

        while (true) {
            sum = datas[pre].data + datas[post].data;
            if (sum == target) {
                break;
            } else if (sum < target) {
                pre = pre + 1;
            } else {
                post = post - 1;
            }
        }

        int[] res = { datas[pre].index, datas[post].index };
        return res;
    }
}

執(zhí)行用時:6 ms, 在所有 Java 提交中擊敗了36.96%的用戶
內(nèi)存消耗:38.7 MB, 在所有 Java 提交中擊敗了32.34%的用戶

36%句携,結(jié)果不太好,下一個方法允乐。

哈希表

以數(shù)組下標(biāo)為key矮嫉,對應(yīng)位置上的元素為value,創(chuàng)建hashMap牍疏,命名為map蠢笋。

對所給數(shù)組nums進(jìn)行遍歷。對每個元素鳞陨,若與該元素加和為target的那個數(shù)是map的一個key昨寞,則找到答案,將該元素的下標(biāo)與那個key對應(yīng)的value返回厦滤;若不是map的一個key援岩,將該元素的<元素值,下標(biāo)>添加到map中(即使該元素已存在與map中也無所謂掏导,因?yàn)轭}設(shè)已說明答案必定唯一)

一次遍歷即可得到結(jié)果

java代碼如下:

import java.util.HashMap;

class Solution {
    public int[] twoSum(int[] nums, int target) {
        int length = nums.length;
        HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();

        for (int i = 0; i < length; i++) {
            if (map.containsKey(target - nums[i])) {
                int[] res = { i, map.get(target - nums[i]) };
                return res;
            } else {
                map.put(nums[i], i);
            }
        }

        return null;
    }
}

執(zhí)行用時:0 ms, 在所有 Java 提交中擊敗了100.00%的用戶
內(nèi)存消耗:38.7 MB, 在所有 Java 提交中擊敗了41.46%的用戶

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載享怀,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。
  • 序言:七十年代末趟咆,一起剝皮案震驚了整個濱河市添瓷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌忍啸,老刑警劉巖仰坦,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件履植,死亡現(xiàn)場離奇詭異计雌,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)玫霎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進(jìn)店門凿滤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來妈橄,“玉大人,你說我怎么就攤上這事翁脆【祢荆” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵反番,是天一觀的道長沙热。 經(jīng)常有香客問我,道長罢缸,這世上最難降的妖魔是什么篙贸? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮枫疆,結(jié)果婚禮上爵川,老公的妹妹穿的比我還像新娘。我一直安慰自己息楔,他們只是感情好寝贡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著值依,像睡著了一般圃泡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鳞滨,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天洞焙,我揣著相機(jī)與錄音,去河邊找鬼拯啦。 笑死澡匪,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的褒链。 我是一名探鬼主播唁情,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼甫匹!你這毒婦竟也來了甸鸟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤兵迅,失蹤者是張志新(化名)和其女友劉穎抢韭,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體恍箭,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡刻恭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鳍贾。...
    茶點(diǎn)故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡鞍匾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出骑科,到底是詐尸還是另有隱情橡淑,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布咆爽,位于F島的核電站梁棠,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏斗埂。R本人自食惡果不足惜掰茶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蜜笤。 院中可真熱鬧濒蒋,春花似錦、人聲如沸把兔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽县好。三九已至围橡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缕贡,已是汗流浹背翁授。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留晾咪,地道東北人收擦。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像谍倦,于是被迫代替她去往敵國和親塞赂。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評論 2 355

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