元の質問へのリンク
問題解決のアイデア
- 配列を繰り返し処理し、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);
}
};




