リキューブラッシングの質問---最初の質問--- 2つの数字の合計

主題の要件

ここに写真の説明を挿入

問題解決

方法1(従来の解決策)

配列をトラバースします。
最初の番号の場合は、後ろから追加されている番号があるかどうかを確認します。追加されている
場合は、添え字
JSコードを返します。

var twoSum = function(nums, target) {
    
    
	let data = [];
	let k = 0;
	for(let i = 0;i<nums.length;i++){
    
    
		for (let j = i + 1;j<nums.length;j++){
    
    
			if(nums[i]+nums[j]==target){
    
    
				data[k] = i;
				data[k+1] = j;
				k++;
				i=j;
			}
		}
	}
return data;
};

または

var twoSum = function(nums, target) {
    
    
	let c = [];
	for (let index of nums.keys()){
    
    
	if(c.indexOf(nums[index])>=0){
    
    
		return [c.indexOf(nums[index]),index]
	}
	else{
    
    
		c.push(target-nums[index]);
		}	
	}
}

方法2(高速)

ここに写真の説明を挿入
アイデア:
数字のペアを探していて、この数字のペアの合計Yが明確であるため、必要なXがわかります(YX)

したがって、探しているのは(YX)ですが、元の配列をトラバースするのは遅く、比較が必要です。たとえば、新しい比較テーブルを作成する場合
、配列
arr = [1,3,4,2]を使用して、6に等しい2つの数値を見つけてターゲットにします。添え字
空の配列arrN = []を作成して
、開始arrN arrのたびにトラバースするターゲット値(1などの現在の値がarrアレイをトラバースする場合があります)格納できます。現在のarr番号がarrNに存在する
かどうかを確認します。なぜですか?arrが初めてトラバースするとき、arrNは空です。arrNに5(6-1)を格納させ、
arrN = [5]この時点で、5がarrNにあることがわかります。添え字は0で、arrの1の添え字も0です。

arrをトラバースし続けます。この時点で、
arrN.indesOf(3)を使用して、arrNで最初に出現する3のインデックスを返します。そうでない場合は、-1を返します。明らかに、arrN = [5]には3はありません。次に、arrNは3(6-3)を格納します。このとき、arrN = [5,3]
はarrをトラバースし続けます。この時点で、トラバーサルは値4に達し
ます。arrN.indesOf(4)を使用して、arrNで最初に出現する4の添え字を返します。そうでない場合は、-1を返します。明らかに、arrN = [5,3]には4がなく、arrNは2(6-4)を格納します。このとき、arrN = [5,3,2]
はarrをトラバースし続け、値は2です。
arrN.indesOf(2)を使用して、arrNで最初に出現する4の添え字を返します。そうでない場合は、-1を返します。明らかにarrN = [5,3,2]には2が含まれ、arrN.indesOf(2)は2を返します。 2は、arrNの2の添え字です。この時点で、arrが添え字3で配列の要素に移動することもわかっています。
次に、タイトルの目的の結果である[2,3]を返します。

理解する必要があるのは、たとえば、arrNに番号を格納する場合、arrの最初の番号1を処理し、1の添え字が0の場合、arrNは最初の番号5(6-1)、5の格納を開始するということです。 arrNの添え字も0で、5は添え字0と一致させるために必要な数なので、arrの数がarrNに存在するかどうかは後で調べます。
4にトラバースすると、2が格納され、2にトラバースすると、arrNに2が存在し、添え字が2、arrの2の添え字が3で
あることがわかり、[2,3]が返されます。

コードは以下のように表示されます

var twoSum = function(nums, target) {
    
    
	let c = [];
	for (let index of nums.keys()){
    
    
		if(c.indexOf(nums[index])>=0){
    
    
			return [c.indexOf(nums[index]),index]
		}
		else{
    
    
			c.push(target-nums[index]);
		}	
	}
};

または

var twoSum = function(nums, target) {
    
    
	let c = [];
	for (let index of nums.keys()){
    
    
		let a = c.indexOf(nums[index]);
		if(a>=0){
    
    
			return [a,index]
		}
		else{
    
    
			c.push(target-nums[index]);
		}	
	}
};





フォローアップでは、

各プラットフォームを詳細に起動します。

フロントエンドを構築するプロセス:jsはじめにvue vue開発アプリレット
バックエンド:javaはじめに
サーバーなどのスプリングブート:mysqlサーバーエントリ簡単な手順プロジェクトを実行するためのクラウドサーバー
python:暖かくないことをお勧めします神の火は必見ですああ
、いくつかのプラグインの使用など。

大学のやり方も自分自身で、一生懸命勉強し、
情熱を持って若くなります。プログラミングに興味がある場合は、qqグループに参加して一緒にコミュニケーションをとることができます:974178910
ここに写真の説明を挿入

ご不明な点がございましたら、下にメッセージを残していただければ、よろしければ返信いたします。

おすすめ

転載: blog.csdn.net/qq_42027681/article/details/111313620