算法——两数之和

  • 找出数组中两数之和等于目标数的下标
const numbers = [3,6,15,20]
const target = 35
const twoSum = (numbers, target) => {
  // ...
}
console.log(twoSum(numbers, target))
// [2, 3] 或 [3, 2]

// 出题者保证
// 1. numbers 中的数字不会重复
// 2. 只会存在一个有效答案
image.png

1、建一个桶,桶里key是没有找到差值的元素,value是它的index;
2、比如从3开始,35-3=32,所以去桶里找是否有32,没有就把元素3放进去;
3、直到20,35-20=15,要去桶里找15,这时桶里有15,那么就找到它两的index了;

const arr = [3,6,15,20]
const target = 35

const twoSum = (arr, target)=>{
  const map = {}
  for(let i=0; i<arr.length; i++){
    const number = arr[i]
    const diffNum = target - number
    
    if(diffNum in map){
      //如果要找的差值已经在桶里
      const diffNumIndex = map[diffNum]
  
      return [diffNumIndex, i]
    }else{
      map[number] = i
    }
  }
  //到最后都没有在循环里return出去,那么肯定就没有啦~
  return []
}

console.log(twoSum(arr, target))
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容