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ループのインデックス値を配列に格納して戻す.具体的な実装コードは以下の通りです.
    /**
     * @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メソッドの使用
    具体的な問題解決の構想:
  • は、空の配列(Mapをシミュレートするために使用される)またはMapタイプの変数mapValueを宣言し、配列内の要素値と対応するインデックスをkev-valueとして格納します.
  • forループループ配列を使用し、target-nums[i]の値がmapValueに存在しない場合、nums[i]をmapValueに格納する.存在する場合、対応するインデックスからなる配列が返されます.データシミュレーション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 [];
    }