给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。
一、暴力枚举
function numAdd1 ( nums, target ){
let len = nums.length;
for( let i = 0; i < len - 1; i++ ){
for( let j = i + 1; j < len; j++ ){
if(nums[i] + nums[j] == target){
return [ i, j ]
}
}
}
return 'error'
}
console.log(numAdd1( [1,5,3,7], 10 ))
方法是从将第一个数分别和后面的数加一遍,然后再将第二个数分别与后面的数加一遍,依次。。。
需要注意的是i不可能为最后一个数, j应为i的下一个数
如果没有找到,则返回error
二、利用总和减去其中一个数
function numAdd2 ( nums, target ){
if(nums == null || nums.length == 0) return
let map = new Map();
for( let i = 0; i < nums.length; i++ ){
let m = target - nums[i]
if(map.has( m )){
return [ map.get( m ), i ]
}
map.set( nums[i], i )//放在这里避免把自己本身算进去
}
}
console.log(numAdd2( [1,5,3,7], 10 ))
map数据结构,因为对象中的键值只能是字符串,有很大的限制,所以有了map,map类似于对象,但是更灵活,
let map = new Map() 创建map 或 new Map([ ['name', 'zhangsan'], ['age', 18] ])
map.set(['aa'], 'ddd') 或 map.set({}, 'www') 或 map.set(12, 'eee') 或 map.set('ddd', 'sdsd')
使用map.set来设置值
map.get(['aa']) map.get(12)等来获取值
map.has(['aa']) 来查找key值是否存在
map.size 获取长度
map.delete(['aa'])删除
map.clear()清除所有成员