LeetCode一道簡單題 Two Sum

LeetCode一道簡單題 Two Sum

題目

給定一個整形數組,請返回和為某個值的兩個數的角標。

你可以假設數組中只有一組符合條件的元素,而且同一個元素不允許使用兩次。


第一種簡單解法:暴力法

LeetCode一道簡單題 Two Sum

兩層循環,時間複雜度為O(n^2) 空間複雜度為O(1)

第二種解法:HashMap兩次迭代

為了降低時間複雜度,顯然要對代碼進行修改。

我們思考用哪種數據結構適合記錄 索引和數值之間的對應關係呢?

顯然可以使用HashMap

這樣通過用空間換時間,將查找元素的時間複雜度由O(n^2) 降到了O(1)。

下面的例子使用兩次map迭代,第一次存儲數組信息,第二次循環時判斷條件是否滿足。

LeetCode一道簡單題 Two Sum

HashMap每次一次查詢元素的時間是O(1) ,所以整個程序的時間複雜度為O(n) 。

map中存放n個數字,空間複雜度為O(n)

第二種解法:HashMap一次遍歷

在迭代過程中,查看map中是否已經存在需要的數字,如果存在將結果返回,如果不存在將當前遍歷的元素插入map中。

LeetCode一道簡單題 Two Sum

時間複雜度和空間複雜度都是O(n),但是隻需要一次迭代。


分享到:


相關文章: