力扣第一题

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
                }
            }
        }
    }
};

猜你喜欢

转载自blog.csdn.net/qq_54455551/article/details/129186933