日常:JavaScript解leetcode练习(1. 两数之和)

108 阅读1分钟

本人算法小白,希望各位大牛给予指导

2020.3.24

今天开始刷leetcode题

坚信付出努力就会有回报

使用数组解,复杂度为O(n^2),因为indexOf的复杂度为O(n)。

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    for(let i = 0;i<nums.length;i++){
        let numTo = target-nums[i]
        if(numTo === nums[i]){
            nums[i] = true
        }
        let numHas = nums.indexOf(numTo)
        if(numHas !== -1){
            return [i,numHas]
        }
    }
};

使用map数据结构解,时间复杂度为O(n),因为哈希的查找复杂度为O(1),Set/Map都是这样,代价是哈希的存储空间通常为数据大小的两倍。

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    let map = new Map()
    for(let i = 0,len=nums.length;i<len;i++){
        let numTo = target-nums[i]
        if(map.has(numTo)){
            return [map.get(numTo),i]
        }
        map.set(nums[i],i)
    }
};