LeetCode--两数之和

102 阅读1分钟

题目描述

LeetCode题源

思路

假设nums[i] + nums[j] = target

nums[i] + nums[j] = target;
nums[j] = target - nums[i];

我的解题

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    for(var i = 0; i < nums.length; i++) {
        const res = target - nums[i];
        for(var j = i+1; j < nums.length; j++) {
            if(res === nums[j]) {
                return [i, j];
            }
        }
    }
    
};

优质解题

  • 思路
设定一个map集合,存放中间数组
循环数组,
在循环内,设定一个变量targetNum,它等于目标值-数组的当前循环到的数字对应的值
然后判断map是否包含这个变量值,如果包含就可以输出这个结果
如果不包含,就把当前循环到的数字对应的值和当前循环的数字存储到map集合里
然后进行循环,直到循环结束
  • 解题
var twoSum = function(nums, target) {
    const map = {}
    const len = nums.length
    for(let i=0;i<len; i++){
        const targetNum = target - nums[i];
        if(targetNum in map) return [map[targetNum], i]
        map[nums[i]] = i
    }  
};

关键用map,将时间复杂度从O(n^2)降至O(n)