//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,避免了後續擴容的開銷。另一方面,循環遍歷的時候不需要每次都去計算數組的長度。