元の質問へのリンク
問題解決のアイデア
- 配列を繰り返し処理し、target - nums[index]とindexを1つずつ保存します。
- 次にトラバースするとき、Mapにtarget - nums[index]があれば、2つの数字の和をtargetとして見つけたことになります。
- この時点で、マップから直接、保存されたインデックスを取り出すことができ、インデックスの組み合わせの現在の値がその結果です。
/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function (nums, target) {
 // Mapを使用して、トラバースしたインデックスの結果を保存する。
 let map = new Map();
 for (let index = 0; index < nums.length; index++) {
 // 現在の値がMapに保存されているかどうかを判断し、保存されていれば、2つの数値を足すと次の値になることがわかったことになる。target
 if (typeof map.get(nums[index]) === 'number') {
 // 保存されたインデックスと現在値の和を返す。index
 return [map.get(nums[index]), index];
 }
 // 現在値とターゲットとの差、および現在値のインデックスをMap
 // にトラバースする場合target - nums[index]2つの数値の和をターゲットとして見つけたら、現在のインデックスを直接取り出すことができる。
 map.set(target - nums[index], index);
 }
};




