通过字典方式实现
- 时间复杂度:O (n)
空间复杂度:O (n)
function twoSum(nums, target) {
const map = new Map();
for (let i = 0; i < nums.length; i++) {
const item = nums[i];
const need = target - item;
if (map.has(need)) {
return [map.get(need), i];
} else {
map.set(item, i);
}
}
}
代码中存在一个 for 循环,所以时间复杂度是 O (n) ,这里可能就会有同学问 map.has 也是遍历元素不算循环码?其实 map 不是数组,在内存中是不连续的,所以不是遍历,而是直接根据内存地址来查找的。开辟的空间只有 map 是受 nums 长度影响的,所以空间复杂度为 O (n)