001 - 两数之和


题目内容

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:

给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

解题 1 - 双for循环

let twoSum = (nums , target) => {
    for (let i = 0 ; i < nums.length; i++){
        for(let j = i + 1 ; j <nums.length ; j ++){
            if(nums[i] + nums[j] === target) return [i,j]
        }
    }
}
twoSum([1,7,10,90],100) // [2,3]

思路 : 循环比较
1 => 7 , 10 , 90
7 => 10 , 90
10 => 90

解题 2 - 对象或Map

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

let twoSum = (nums,target) =>{
    let obj = {} ; 
    for (let i = 0 ; i < nums.length ; i++){ // 1 
        if (obj[nums[i]]){
            return [obj[nums[i]] , i] ;  
        } else {
            obj[target - nums[i]] = i ;  // {16 : 0 , 15 : 1 , 14 : 2 , 13 : 3 ....  , 10 : 6 , 9 : 7 }
        }
    }
}

解题 3 - indexOf

let twoSum = (nums , target) => {
    let result = [] ; 
    nums.map((item,index)=>{
        if(nums.indexOf(target - item) > -1 && nums.indexOf(target- item) !== index){
            result = [index, nums.indexOf(target - item)]
        }
    })
    return result ; 
}

文章作者: Jia
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Jia !
  目录