JS求两数之和

2023-05-23 11:27:49 浏览数 (1)

题目:给定一个整数数组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)

0 人点赞