LeetCode解析(一):Two Sum

Given an array of integers, return indices of the two numbers such that they add up to a specific target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

Example:

Given nums = [2, 7, 11, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
難度:easy

解析:在給定數(shù)組之中,得到兩個數(shù)字确沸,這兩個數(shù)字之和等于給定數(shù)字惠啄,返回兩數(shù)字的序號下標。由于題干中已經(jīng)表明有且只有一組解棋傍,因此不用考慮很多異常情況,只需得到該答案即可纺阔。

方法一:窮舉遍歷(★★★)

最簡單的方法就是窮舉遍歷转绷,計算所有數(shù)字兩兩之和,直至得到答案戈毒。

class Solution {
    public int[] twoSum(int[] nums, int target) {
        
        for ( int i = 0 ; i < nums.length ; i++){
            for ( int j = i + 1 ; j < nums.length ; j++){
                if(nums[i] + nums[j] == target){
                    return new int[] {i,j};
                }
            }
        }
        
        return null;
    }
}

結果:Runtime: 26 ms艰猬,beats 33.69% of Java submission.
備注:遍歷數(shù)組,時間復雜度O(n^2)埋市,顯然這個操作很一般冠桃。

方法二:Map篩選(★★★★)

添加map作為篩選條件。遍歷給出的數(shù)組道宅,對于任意數(shù)字nums[i]食听,如果map中不包含nums[i],則將鍵值對(target-nums[i]污茵,i)置于map中碳蛋,如果map中包含nums[i],則{i省咨,map.get(nums[i])}為所求答案。
因為有且僅有一組解玷室,假設a1零蓉,a2為這組解,則a1會先置于map中穷缤,且鍵值對為(target-nums[a1]敌蜂,a1),當遍歷到nums[a2]時津肛,可知map包含nums[a2](即 nums[a2] == target-nums[a1])章喉,故可得答案為數(shù)組{a1,a2}。

class Solution {
    public int[] twoSum(int[] nums, int target) {
        
        HashMap<Integer,Integer> map = new HashMap();
        
        for( int i = 0 ; i < nums.length ; i++){
            if(map.containsKey(nums[i])){
                return new int[] { map.get(nums[i]) ,i};
            }else{
                map.put((target - nums[i]),i);
            }
        }
        return null;
    }
}

結果:Runtime: 4 ms秸脱,beats 90.71% of Java submission.
備注:遍歷數(shù)組落包,時間復雜度O(n),同時使用HashMap進行key-value尋值摊唇,尋找這個唯一解咐蝇。

方法三:數(shù)組篩選(★★★★★)----所有用戶提交通過的答案中的最佳方法之一

此方法和方法二的思路基本一致,只不過方法二是使用map進行尋值巷查,此方法是使用數(shù)組進行尋值有序。其主要思路如下,新建一個數(shù)組arr岛请,保存未尋得配對的數(shù)字旭寿,保存方式:arr[ nums[ i ] ] = i。
遍歷原數(shù)組nums崇败,對于原數(shù)組任一數(shù)字nums[ i ]盅称,前往arr中尋值,如果arr[ target - nums[ i ] ] > 0僚匆,則代表目標值尋得微渠,答案為{ i ,arr[ target - nums[ i ] ] }咧擂,如果arr[ target - nums[ i ] ] == 0逞盆,為默認值,則代表目標值未插入arr松申,將當前值插入arr中云芦。
備注:此方法有幾個注意點,
(1)diff&max贸桶,nums[i]&max舅逸,這兩處且運算是為了防止diff和nums[i]大于2048導致超界無法插入arr中;
(2)“ 如果arr[ target - nums[ i ] ] == 0皇筛,為默認值琉历,則代表目標值未插入arr ”,這一結論并非絕對正確的水醋,可能0就是目標值的位置旗笔,而不是默認值0,所以需要在一開始對nums[0]進行判斷之后拄踪,arr[ target - nums[ i ] ] == 0才可以認為是默認值0.

class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] arr=new int[2048];
        int max=arr.length-1;
        int first=nums[0];
        for(int i=1;i<nums.length;i++){
            int diff=target-nums[i];
            if(first==diff){
                return new int[]{0,i};
            }
            int index=arr[diff&max];
            if(index!=0){
                return new int[]{index,i};
            }
            arr[nums[i]&max]=i;
        }
        return null;
    }
}

結果:Runtime: 1 ms蝇恶,beats 99% of Java submission.
備注:遍歷數(shù)組,時間復雜度O(n)惶桐,同時使用數(shù)組進行尋值撮弧,尋找這個唯一解潘懊。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市贿衍,隨后出現(xiàn)的幾起案子授舟,更是在濱河造成了極大的恐慌,老刑警劉巖舌厨,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件岂却,死亡現(xiàn)場離奇詭異,居然都是意外死亡裙椭,警方通過查閱死者的電腦和手機躏哩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來揉燃,“玉大人扫尺,你說我怎么就攤上這事〈短溃” “怎么了正驻?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長抢腐。 經(jīng)常有香客問我姑曙,道長,這世上最難降的妖魔是什么迈倍? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任伤靠,我火速辦了婚禮,結果婚禮上啼染,老公的妹妹穿的比我還像新娘宴合。我一直安慰自己,他們只是感情好迹鹅,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布卦洽。 她就那樣靜靜地躺著,像睡著了一般斜棚。 火紅的嫁衣襯著肌膚如雪阀蒂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天弟蚀,我揣著相機與錄音脂新,去河邊找鬼。 笑死粗梭,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的级零。 我是一名探鬼主播断医,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼滞乙,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鉴嗤?” 一聲冷哼從身側響起斩启,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎醉锅,沒想到半個月后兔簇,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡硬耍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年垄琐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片经柴。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡狸窘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出坯认,到底是詐尸還是另有隱情翻擒,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布牛哺,位于F島的核電站陋气,受9級特大地震影響,放射性物質發(fā)生泄漏引润。R本人自食惡果不足惜巩趁,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望椰拒。 院中可真熱鬧晶渠,春花似錦、人聲如沸燃观。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缆毁。三九已至番川,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間脊框,已是汗流浹背颁督。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留浇雹,地道東北人沉御。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像昭灵,于是被迫代替她去往敵國和親吠裆。 傳聞我的和親對象是個殘疾皇子伐谈,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

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