1.Two Sum

慢慢開始刷leetcode扮授。
自勉穴肘。

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 (target - nums[i] == nums[j]) 
                        return new int [] {i, j};
         }
      }
      return null;
}  

暴力搜索 殘差

時(shí)間復(fù)雜度O(n**2)
空間復(fù)雜度O(1)

另外兩種以HashMap為主

總結(jié)下hashmap的特點(diǎn)

HashMap<String, Double> map = new HashMap<String, Double>();
map.put("ss", 11.0);

每個(gè)java object 都有hashCode() 方法。
put 源碼

public V put(K key, V value)   
{   
 // 如果 key 為 null杖们,調(diào)用 putForNullKey 方法進(jìn)行處理  
 if (key == null)   
     return putForNullKey(value);   
 // 根據(jù) key 的 keyCode 計(jì)算 Hash 值  
 int hash = hash(key.hashCode());   
 // 搜索指定 hash 值在對(duì)應(yīng) table 中的索引  
     int i = indexFor(hash, table.length);  
 // 如果 i 索引處的 Entry 不為 null,通過循環(huán)不斷遍歷 e 元素的下一個(gè)元素  
 for (Entry<K,V> e = table[i]; e != null; e = e.next)   
 {   
     Object k;   
     // 找到指定 key 與需要放入的 key 相等(hash 值相同  
     // 通過 equals 比較放回 true)  
     if (e.hash == hash && ((k = e.key) == key   
         || key.equals(k)))   
     {   
         V oldValue = e.value;   
         e.value = value;   
         e.recordAccess(this);   
         return oldValue;   
     }   
 }   
 // 如果 i 索引處的 Entry 為 null,表明此處還沒有 Entry   
 modCount++;   
 // 將 key辛块、value 添加到 i 索引處  
 addEntry(hash, key, value, i);   
 return null;   
}   

方法中Map.Entry接口也是key-value對(duì), HashMap中完全沒有考慮value铅碍,只由key的HashCode決定存儲(chǔ)位置润绵,再一起存儲(chǔ)value。
indexFor 則搜索table處的索引胞谈。

static int indexFor(int h, int length)   
{   
    return h & (length-1);   
}  

當(dāng) length 總是 2 的倍數(shù)時(shí)尘盼,h & (length-1) 將是一個(gè)非常巧妙的設(shè)計(jì):假設(shè) h=5,length=16, 那么 h & length - 1 將得到 5憨愉;如果 h=6,length=16, 那么 h & length - 1 將得到 6 ……如果 h=15,length=16, 那么 h & length - 1 將得到 15;但是當(dāng) h=16 時(shí) , length=16 時(shí)卿捎,那么 h & length - 1 將得到 0 了配紫;當(dāng) h=17 時(shí) , length=16 時(shí),那么 h & length - 1 將得到 1 了……這樣保證計(jì)算得到的索引值總是位于 table 數(shù)組的索引之內(nèi)午阵。

兩步hash法

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

先將value-key存入map躺孝,再索引。
Time complexity : O(n). We traverse the list containing n elements exactly twice. Since the hash table reduces the look up time to O(1), the time complexity is O(n).

Space complexity : O(n). The extra space required depends on the number of items stored in the hash table, which stores exactly n elements.

一步法

在存入map時(shí)就檢索是否存在.

public int[] twoSum(int[] nums, int target) {
        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
        for (int i = 0; i < nums.length; i++) {
            int res = target - nums[i];
            if (map.containsKey(res)) {
                return new int[] {map.get(res), i};
            }
            map.put(nums[i], i);
        }
        return null;
   }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末底桂,一起剝皮案震驚了整個(gè)濱河市植袍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌籽懦,老刑警劉巖于个,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異暮顺,居然都是意外死亡厅篓,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門捶码,熙熙樓的掌柜王于貴愁眉苦臉地迎上來羽氮,“玉大人,你說我怎么就攤上這事宙项》啵” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵尤筐,是天一觀的道長汇荐。 經(jīng)常有香客問我,道長盆繁,這世上最難降的妖魔是什么掀淘? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮油昂,結(jié)果婚禮上革娄,老公的妹妹穿的比我還像新娘。我一直安慰自己冕碟,他們只是感情好拦惋,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著安寺,像睡著了一般厕妖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上挑庶,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天言秸,我揣著相機(jī)與錄音软能,去河邊找鬼。 笑死举畸,一個(gè)胖子當(dāng)著我的面吹牛查排,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播抄沮,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼跋核,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了合是?” 一聲冷哼從身側(cè)響起了罪,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎聪全,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辅辩,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡难礼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了玫锋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛾茉。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖撩鹿,靈堂內(nèi)的尸體忽然破棺而出谦炬,到底是詐尸還是另有隱情,我是刑警寧澤节沦,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布键思,位于F島的核電站,受9級(jí)特大地震影響甫贯,放射性物質(zhì)發(fā)生泄漏吼鳞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一叫搁、第九天 我趴在偏房一處隱蔽的房頂上張望赔桌。 院中可真熱鬧,春花似錦渴逻、人聲如沸疾党。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽雪位。三九已至,卻和暖如春墓贿,著一層夾襖步出監(jiān)牢的瞬間茧泪,已是汗流浹背蜓氨。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留队伟,地道東北人穴吹。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像嗜侮,于是被迫代替她去往敵國和親港令。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

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

  • Two Sum 題目描述 Given an array of integers, return indices o...
    Hehe丶閱讀 283評(píng)論 0 0
  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi閱讀 7,332評(píng)論 0 10
  • Lua 5.1 參考手冊(cè) by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 13,803評(píng)論 0 38
  • 每次看了電影都想寫影評(píng)锈颗,但這次是第一次寫顷霹。 心靈捕手很早很早就下了的,當(dāng)時(shí)下來看只是因?yàn)樗且徊啃睦韺W(xué)的經(jīng)典作品击吱。...
    橘冬林閱讀 422評(píng)論 0 0
  • 我喜歡寫作淋淀,經(jīng)常看寫作方面的書覆醇,今天我把《一本小小的紅色寫作書》放在電腦桌上朵纷,大概是占了老公放電腦的位置,老公拿起...
    早早不晚閱讀 294評(píng)論 4 2