1、原题解
js 原题解 双层循环,使用findIndex获取索引,用undefined替换掉原数组中已经找到的数据,避免造成[0,1]和[1,0]的结果出现. findIndex有满足条件就return循环,比下面方法更节约性能
var twoSum = function(nums, target) {
let a
let arr = []
for(i = 0; i < nums.length; i++){
let val = target - nums[i]
a = nums.findIndex(( item, index ) => {
return item == val && index != i
})
if(a != -1){
arr.push([i,a])
nums.splice(a,1,undefined)
}
}
return arr
};
2、获取数组中重复的满足和条件的数据
js 数组中可以有重复的数据,能获取全部数据中两者之和为target的索引组
var twoSum = function(nums, target) {
let val
let arr = []
for(i = 0; i < nums.length; i++){
val = target - nums[i]
nums.forEach((item,index) => {
if(item == val && index != i){
arr.push([i,index])
nums.splice(index,1,undefined)
}
});
}
console.log(arr)
return arr
};
3、2的改进版,相较于2更加节省性能
在2的基础上,换了一个循环,加上了一个非undefined的判断,如果是undefined就不进行二层循环,将二层循环初始值换成i+1,表示已经进行判断的值就不在二层循环里面在重复循环。第一层循环的最后一个值不进行判断。
var twoSum = function(nums, target) {
let val
let arr = []
let changdu = nums.length
for(i = 0; i < changdu - 1; i++){
val = target - nums[i]
if(nums[i] !== undefined){
for(m = i + 1; m < changdu; m++){
if(nums[m] == val){
arr.push([i,m])
nums.splice(m,1,undefined)
}
}
}
}
console.log(arr)
return arr
};
console.log("twoSum", twoSum([2,7,11,7,15,7,1,8], 9))
4、1的改进版
var twoSum = function(nums, target) {
let val
let arr = []
let changdu = nums.length
for(i = 0; i < changdu - 1; i++){
val = target - nums[i]
if(nums[i] !== undefined){
for(m = i + 1; m < changdu; m++){
if(nums[m] == val){
arr.push(i)
arr.push(m)
nums.splice(m,1,undefined)
return arr
}
}
}
}
};