题目内容
给定一个整数数组 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 ;
}