題目
給定一個整形數組,請返回和為某個值的兩個數的角標。
你可以假設數組中只有一組符合條件的元素,而且同一個元素不允許使用兩次。
第一種簡單解法:暴力法
兩層循環,時間複雜度為O(n^2) 空間複雜度為O(1)
第二種解法:HashMap兩次迭代
為了降低時間複雜度,顯然要對代碼進行修改。
我們思考用哪種數據結構適合記錄 索引和數值之間的對應關係呢?
顯然可以使用HashMap
這樣通過用空間換時間,將查找元素的時間複雜度由O(n^2) 降到了O(1)。
下面的例子使用兩次map迭代,第一次存儲數組信息,第二次循環時判斷條件是否滿足。
HashMap每次一次查詢元素的時間是O(1) ,所以整個程序的時間複雜度為O(n) 。
map中存放n個數字,空間複雜度為O(n)
第二種解法:HashMap一次遍歷
在迭代過程中,查看map中是否已經存在需要的數字,如果存在將結果返回,如果不存在將當前遍歷的元素插入map中。
時間複雜度和空間複雜度都是O(n),但是隻需要一次迭代。
閱讀更多 明明如月學長 的文章