二つの数と
1、2つの数字
説明:指定された整数配列NUMSと目標値、目標、および配列内の2つの整数の目標値を特定し、その配列の添字に戻るにお願いします。あなたは、各入力が一つだけ答えに対応することを想定することができます。ただし、同じ配列要素を再使用することはできません。
問題解決の3種類の解釈
図符号1に示すように、二回の二重サイクルを探し、ブルートを使用して、各データは、残りの数を見つけ、その後、電流Iから第二層トラバーサルサイクル(なおを使用するトラバース第一の層を横断しています+ 1つの開始、そうでない場合は、検索した後、ループを終了するために直接戻り、その後、)同じインデックス値が存在してもよく、この方法は、明らかに、I <Jを知ることができます。
図2に示すように、データは最初のマップ値キーに格納されるオブジェクトデータストレージを使用してオブジェクトが、インデックスindex次いで横断しなければならない値であり、残りの結果が見つかり、被験体中に存在するとしないがIに等しい場合、次にことを見出しました終了、しかし、出口の大規模なソートを小型に注意してください。
図3は、原則として上記でなく、地図データ記憶のデータ構造を使用して、データが最初のマップに格納され、その後、あなたは一度トラバースを直接見ることができます。
var twoSum = function(nums, target) {
// 暴力解决
// for (let i = 0; i < nums.length; i++) {
// let left = target - nums[i];
// for (let j = i + 1; j < nums.length; j++) {
// if (nums[j] === left) {
// return [i, j]
// }
// }
// }
//使用map实现
// let map = {};
// for (let i = 0; i < nums.length; i++) {
// map[nums[i]] = i;
// }
// for (let i = 0; i < nums.length; i++) {
// let left = target - nums[i];
// if (map[left] && map[left] !== i) {
// return [map[left], i].sort((a, b) => a - b);
// }
// }
// Map
let map = new Map();
for (let i = 0; i < nums.length; i++) {
map.set(nums[i], i);
}
for (let i = 0; i < nums.length; i++) {
let left = target - nums[i];
if (map.get(left) && map.get(left) !== i) {
return [map.get(left), i].sort((a, b) => a - b);
}
}
};
深刻な学習アルゴリズム、毎日質問共通の開発と進歩を願っています。