不正经IT从业者

两数之和

2020-06-09  本文已影响0人  Mark_大东

两数之和

难度:简单

第一种方法

这个方法是最容易想到的,在不考虑时间复杂度的情况下,双重循环遍历,时间复杂度为O(n^2)。

var twoSum = function(nums, target) {
    for (let i = 0 ; i < nums.length ; i ++){
        let next = target - nums[i]
        for (let j = i + 1 ; j < nums.length ; j ++){
            if (nums[j] == next){
                return [i,j]
            }
        }
    } 
};

第二种方法:

利用map存储键值,达到时间换空间的目的

var twoSum = function(nums, target) {
    let map = new Map()
    for (let i = 0 ; i < nums.length ; i ++){
        let next = target - nums[i]
        if (map.has(next)){
            return [map.get(next),i]
        }
        map.set(nums[i],i) 
    } 
};

第三种方法:

使用对象的存储键值

//使用while遍历
var twoSum = function(nums, target) {
    let map = {}
    let length = 0
    while(length < nums.length){
        let next = target - nums[length]
        if (map[next] != undefined){
            return [map[next],length]
        }
        map[nums[length]] = length
        length ++
    }
};

//使用for遍历
var twoSum = function(nums, target) {
    let map = {}
    for (let i = 0 ; i < nums.length ; i ++){
        let next = target - nums[i]
        if (map[next] != undefined){
            return [map[next],i]
        }
        map[nums[i]] = i
    }
};
上一篇 下一篇

猜你喜欢

热点阅读