常规办法:两次遍历
var twoSum = function (nums, target) {
let res = []
for (let i = 0; i < nums.length - 1; i++) {
for (let j = i + 1; j < nums.length; j++) {
if (nums[i] + nums[j] === target) {
res[0] = i;
res[1] = j;
return res;
}
}
}
};
console.log(twoSum([3, 2, 4], 6));
法2:模拟Map的特点
Map
的特点:其本质和Object
一样都是键值对,但是普通的Ojbect
中的键值对中的键只能说字符串。而ES6
提供的Map
数据结构类似于对象,但是其键不限制范围,可以是任意类型。且如果Map
的键是一个原始数据类型,只要两个键严格相同,就视为同一个键。
function twoSum(arr,target){
let diff={} //用来保存已经遍历过的数值,模拟Map的结构
let len=arr.length;
for(let i = 0;i<len;i++){
if(diff[target-arr[i]]!=undefined){
// 数1,索引1,数2,索引2,目标值
return [arr[i],i,target-arr[i],diff[target-arr[i]],target]
}
//通过[属性名]的方式为diff对象添加属性,其key则是值,其value代表索引。
diff[arr[i]]=i
}
}
法3.直接利用Map结构
function twoSum(arr,target){
let diff =new Map();
let len = arr.length;
for(let i = 0;i<len;i++){
if(diff.has(target-arr[i])){
//数字1,索引1,数组2,索引2
return [arr[i],i,target-arr[i],diff.get(target-arr[i])]
}
diff.set(arr[i],i)
}
}
Map数据结构的操作方法: