LeetCode第一題·兩數之和 最優解

//leetcode submit region begin(Prohibit modification and deletion)
import java.util.HashMap;
class Solution {
    public int[] twoSum(int[] nums, int target) {
        int length = nums.length;
        Map<Integer, Integer> map = new HashMap<>(length);
        for (int i = 0; i < length; i++) {
            int diff = target - nums[i];
            if (map.containsKey(diff)) {
                return new int[]{map.get(diff), i};
            }
            map.put(nums[i], i);
        }
        return null;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

解題思路:創建一個map,,將數組中的值作爲key,座標作爲value,塞入map中,循環遍歷數組,若map中存在目標數值target與當前數組元素nums[i]的差值的key,即返回座標。

時間複雜度和空間複雜度都爲O(n),以空間換時間,提高計算效率。

小細節:先計算出數組的長度,一方面可以直接創建明確大小容量的HashMap,避免了後續擴容的開銷。另一方面,循環遍歷的時候不需要每次都去計算數組的長度。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章