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 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,避免了后续扩容的开销。另一方面,循环遍历的时候不需要每次都去计算数组的长度。

你可能感兴趣的:(算法)