最初の質問の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
ご不明な点がございましたら、下にメッセージを残していただければ、よろしければ返信いたします。