LeetCode-2つの数値の合計(js + Mapデータ構造)

トピック

整数配列numsとターゲット値targetが与えられた場合、合計が配列内のターゲット値である2つの整数を見つけて、それらの配列添え字を返します。

例:

nums = [2、7、11、15]、target = 9の場合
、nums [0] + nums [1] = 2 + 7 = 9である
ため、[0、1]を返します。

アイデア:

  1. 地図を作成する
  2. nums配列をトラバースするforループ
  3. ターゲットを使用してnums [i]を減算し、現在の数値に追加してターゲットを取得できる数値を計算します
  4. マップ内のターゲットでnums [i]を減算して得られた数値があるかどうかを確認し、ある場合は結果を返します。ない場合は、num [i]をキーとして使用し、iを値としてマップに使用します(なぜですか?) uはマップを使用しました。マップ内の対応するキーを確認しました

シミュレーションの場合:NUMSは= [2,3,11,7]ターゲット=
7,6、-2,2
2,7を見つけ、0と3返すために
MAP = { 2:0、3:1、11:2 } 9 -7は2に等しく、マップにこの番号があり、対応する2と7の値が見つかります




const twoSum = (nums, target) => {
    
    
  //创建一-个map
    const map = new Map()
    //for循环遍历nums数组
    for (let i= 0; i<nums.length; i++) {
    
    
      //用target减nums[i],以计算哪个数能跟当前的数字相加得到target
      const complement = target - nums[i]
     // 检查map里有没有用target减nums[i]得到的数,如果有则返回结果,如果没有则把num[i]当作key,i当作value放入map中,用到了map.has检查map中对应的key
      if (map.has(complement)) {
    
    
        //如果查找到map中存在就返回两个数对应的下标
        return [map.get(complement),i]
      }else {
    
    
        map.set(nums[i],i)
      }
    }
    return []
}

console.log(twoSum([2,3,11,7],9))//[ 0, 3 ]

おすすめ

転載: blog.csdn.net/pz1021/article/details/105799702