LeetCode(JavaScript実装)——2つの数の和
9994 ワード
目次題 JavaScript実装 方法一:暴力解法 メソッド2:Mapメソッド を使用
タイトル
整数配列numsとターゲット値targetを指定します.この配列でターゲット値の2つの整数を見つけて、その配列の下付きを返します.入力ごとに1つの答えしか対応しないと仮定できます.ただし、配列内の同じ要素は2回使用できません.例はnums=[2,7,11,15]を与え,target=9はnums[0]+nums[1]=2+7=9であるため[0,1]を返す.
ソース:力ボタン(LeetCode)リンク:https://leetcode-cn.com/problems/two-sum
JavaScript実装
方法1:暴力解法
2つのネストforループを用いて実現し、外層forループはインデックスiから始まり、内層forループインデックスはi+1から始まり、配列に2つの要素の和がターゲット要素に等しいことを見つけた場合、内外2層forループのインデックス値を配列に格納して戻す.具体的な実装コードは以下の通りです.
方法2:Mapメソッドの使用
具体的な問題解決の構想:は、空の配列(Mapをシミュレートするために使用される)またはMapタイプの変数mapValueを宣言し、配列内の要素値と対応するインデックスをkev-valueとして格納します. forループループ配列を使用し、target-nums[i]の値がmapValueに存在しない場合、nums[i]をmapValueに格納する.存在する場合、対応するインデックスからなる配列が返されます.データシミュレーションmapを用いて、具体的なコードは以下のように実現される:
Mapタイプ変数を使用する具体的な実装コードは次のとおりです.
タイトル
整数配列numsとターゲット値targetを指定します.この配列でターゲット値の2つの整数を見つけて、その配列の下付きを返します.入力ごとに1つの答えしか対応しないと仮定できます.ただし、配列内の同じ要素は2回使用できません.例はnums=[2,7,11,15]を与え,target=9はnums[0]+nums[1]=2+7=9であるため[0,1]を返す.
ソース:力ボタン(LeetCode)リンク:https://leetcode-cn.com/problems/two-sum
JavaScript実装
方法1:暴力解法
2つのネストforループを用いて実現し、外層forループはインデックスiから始まり、内層forループインデックスはi+1から始まり、配列に2つの要素の和がターゲット要素に等しいことを見つけた場合、内外2層forループのインデックス値を配列に格納して戻す.具体的な実装コードは以下の通りです.
/**
* @param {number[]} nums
* @param {number} target
* @return [number[]]
* O(n^2)
*/
function twoSum(nums, target)
{
if(nums.length < 2) return [];
let len = nums.length;
for (let i = 0; i < len; ++i)
{
for (let j = i + 1; j < len; ++j)
{
if (nums[i] + nums[j] == target)
return [i, j];
}
}
return [];
}
方法2:Mapメソッドの使用
具体的な問題解決の構想:
/**
* @param {number[]} nums
* @param {number} target
* @return [number[]]
*/
function twoSum(nums, target)
{
if (nums.length < 2) return [];
let mapValue = [];
let len = nums.length;
for (let i = 0; i < len; ++i)
{
let subValue = target - nums[i];
if (mapValue[subValue] != undefined)
return [mapValue[subValue], i];
mapValue[nums[i]] = i; // , [undefined, undefined, 4...]
}
return [];
}
Mapタイプ変数を使用する具体的な実装コードは次のとおりです.
/**
* @param {number[]} nums
* @param {number} target
* @return [number[]]
*/
function twoSum(nums, target)
{
if (nums.length < 2) return [];
let mapValue = new Map();
let len = nums.length;
for (let i = 0; i < len; ++i)
{
let subValue = target - nums[i];
if (mapValue.has(subValue))
return [mapValue.get(subValue), i];
mapValue.set(nums[i], i);
}
return [];
}