LeetCode-1.Two Sum
問題描述:給你一個(gè)整形數(shù)組,然后給你一個(gè)特定的和,取出數(shù)組中相加等于特定和的兩個(gè)數(shù)值對應(yīng)的下標(biāo),組成的數(shù)組。(這個(gè)題目其實(shí)有一點(diǎn)問題,就是如果數(shù)組中有兩對數(shù)字相加等于目標(biāo)和,那么輸出可能就有問題了,所以特定的場合是至多只有一組)
例如:[2, 7, 11, 15] 目標(biāo)和是9,所以方法應(yīng)該返回????[0, 1]
解法1:
? ? 這可能是大部分人第一時(shí)間想到的方法,就是兩個(gè)for循環(huán)遍歷,判斷相加是否符合,然后輸出,代碼如下:
解法2:
? ? 用Hash Table來解決,這個(gè)方法在時(shí)間復(fù)雜度上面要比上面的方法來的好,特別是在數(shù)據(jù)量很大的情況下,代碼如下:
接下來,我們來看一下測試,簡單的數(shù)組我們就不測試了,兩個(gè)解法使用的時(shí)間大致一樣。我們創(chuàng)建一個(gè)含有0到99999的數(shù)組,然后目標(biāo)和為199997。兩個(gè)測試的時(shí)間如下:
解法1使用的時(shí)間,大約使用了12秒左右,我跑過幾次,時(shí)間大約都在12秒左右。
解法2使用的時(shí)間,大約在7ms左右,我也試過幾次,最長的時(shí)間也就14ms。
從數(shù)據(jù)上面可以看出,大數(shù)據(jù)量的時(shí)候,HashMap使用的時(shí)間要大大的小于解法1。