题目:给定一个整数数组nums,和一个目标值target,请在nums数组中找到两个数字相加等于target,输出这两个整数的下标。
思路:
使用map(当然对象也可,但是性能相比map稍差些),循环nums,将当前循环下标a作为value,将目标值target减去当前循环项得到的值b作为key,储存到map中。问题在于对于b的理解,b其实就是我们要在nums中寻找的值,因为这个差值b加上刚才的循环项c即等于我们的目标值target,一旦找到这个差值,也就是我们要找的这个差值b所在的下标,另外就是当前循环项d。时间复杂度:O(n),空间复杂度:O(n)
代码语言:javascript复制const sum = function (nums, target) {
const map = new Map();
for (let index = 0, len = nums.length; index <= len - 1; index ) {
if (map.has(nums[index])) {
return [map.get(nums[index]), index];
} else {
map.set(target - nums[index], index);
}
}
}
const count = sum([ 1, 1, 22, 2, 1, 8, 2, 2, 9, 12, ], 30); // [2, 5]
使用对象处理
代码语言:javascript复制const sum2 = function (nums, target) {
const obj = {};
for (let index = 0, len = nums.length; index <= len - 1; index ) {
const key = target - nums[index];
const diff = nums[index];
if (obj.hasOwnProperty(diff)) {
return [obj[diff], index];
} else {
obj[key] = index;
}
}
}
当然,如果嵌套两层循环也是可以实现这个需求的,但是时间复杂度:O(n²),空间复杂度:O(n)