4.两数之和

80 阅读1分钟

day7:两数之和(简单) 思路:

  • 不考虑重复值的情况下,目标值为【target-当前项的值】,然后查找【target-当前项的值】的下标并且返回即可。
  • 考虑有重复值的情况:自定义一个查找数组下标的方法,返回符合所有符合条件值得下标。
var twoSum = function (nums, target) {
for (let i = 0; i < nums.length; i++) {
    let index = nums.indexOf(target - nums[i]);
    if (index != i && index != -1) {
      return [i, index];
    }
  }
};
console.log(twoSum([3, 2, 4], 6));

考虑重复值:

var twoSum = function (nums, target) {
  for (let i = 0; i < nums.length; i++) {
    let arr = findIndex(nums, target - nums[i]);
    for (let j = 0; j < arr.length; j++) {
      if (i != arr[j]) {
        return [i, arr[j]];
      }
    }
  }
};

var findIndex = function (array, num) {
  let indexArr = [];
  array.forEach((item, index) => {
    if (item === num) {
      indexArr.push(index);
    }
  });
  return indexArr;
};


使用map存储得方式实现

var twoSum1 = function (nums, target) {
  let map = new Map();
  let result = [];
  nums.forEach((item, index) => {
    let flag = map.get(target - item);
    if (flag === undefined) {
      //说明没找到
      map.set(item, index);
    } else {
      result.push(flag, index);
    }
  });
  return result;
};