Algorithm|2つ抽出して追加


プログラマ

ふたつ引いてから足す


問題の説明


整数配列番号.numbersから異なるインデックスの2つの数を抽出し、作成できるすべての数を昇順に配列に入れ、solution関数の戻りを完了してください.

せいげんじょうけん

  • numbersの長さは2または100より大きい.
  • numbersのすべての数字は0または100以下です.
  • I/O例


    numbersresult[2,1,3,4,1][2,3,4,5,6,7][5,0,2,7][2,5,7,9,12]

    私の答え

    function solution(numbers) {
        let answer = [];
        // 중복된 수를 제외한 합의 배열
        for (let i=0; i<numbers.length; i++){
            for (let j=0; j<numbers.length; j++){
                let num = numbers[i]+numbers[j]
                if(i !== j && answer.indexOf(num) < 0){
                    answer.push(numbers[i]+numbers[j]);
                };
            };
        };
        
        // 삽입정렬 -> 오름차순 정리
        for(let n=1; n<answer.length; n++){
          let key = answer[n];
          let m = n-1;
          while( m >=0 && answer[m]>key){
            answer[m+1] = answer[m];
            m--;
          };
          answer[m+1] = key;
        }
        return answer;
    };
    これは,ソートアルゴリズムを学習する際に学習した挿入ソートを用いることができる例である.私が作成したアルゴリズムの性能、メモリ使用量、複雑さなどを考慮してアルゴリズムを作成する段階ではありませんが、これは私が学んだアルゴリズムを使用できる例です.
    ->もちろん...JS内蔵メソッドを使用すると、より簡単に作業できます...ううう

    その他の解釈。

    function solution(numbers) {
        let answer = [];
        for(let i=0; i < numbers.length; i++){
            for(let j=0; j<numbers.length; j++){
                if(i===j) continue; // 동일한 index는 skip
                answer.push(numbers[i]+numbers[j])
            }
        }
        answer = [...new Set(answer)].sort((a,b)=>a-b)
        return answer;
    }

    その他の解釈。

    function solution(numbers) {
        const temp = []
    
        for (let i = 0; i < numbers.length; i++) {
            for (let j = i + 1; j < numbers.length; j++) {
                temp.push(numbers[i] + numbers[j])
            }
        }
    
        const answer = [...new Set(temp)]
    
        return answer.sort((a, b) => a - b)
    }

    ✅ Set


    :Setオブジェクトは、元の値とオブジェクト参照の一意の値を格納できます.
    86 ES 6が登場するまでJavaScript自体はsetを実施していませんでした.でもセットは何ですか?
    Setは、データ型の1つであり、重複値を持たない値のリストである.また、このとき値に順序は存在しません.
    new Set([iterable])
  • パラメータ
    iterable
    :重複可能なオブジェクトが渡されると、すべての要素が新しいコレクションに追加されます.パラメータが指定されていないかnullが渡されていない場合は、新しい設定は空です.
  • 戻り値
    :新しいSetオブジェクト.
  • コンフィギュレーション


    新しいsetを作成するときにnew set()を使用します.コンフィギュレーションで反復器(iterator)を直接作成できます.
    const foo = new Set();
    console.log(foo) // Set {}
    //
    const bar = new Set([ 1, 2, 3 ]);
    console.log(bar) // Set { 1, 2, 3 }
    setの作成時に重複値の重複文字を超えると、setは重複値の一番前の値を自動的に無視します.
    const foo = new Set([ 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5 ]);
    console.log(foo);
    // Set { 1, 2, 3, 4, 5 }

    グループによるアレイの置換


    前述したように配列をSetに変換することは容易である.配列をSetコンフィギュレータに渡せばいいだけです.逆にsetを配列に置き換えることもできます.すなわち、展開演算子(spread演算子)を使用します.
    const foo = new Set([ 1, 2, 3 ]);
    const fooInArray = [ ...foo ];
    console.log(fooInArray) // [ 1, 2, 3 ];

    ✅ sort()


    :sort()メソッドは、配列内の要素を適切な位置に並べ替え、配列を返します.
    」この場合、元の配列arrがソートされ、返される値も元の配列arrを指します.
    arr.sort([compareFunction])
  • パラメータ
    compareFunction | Optional
    ソート順を定義する関数.省略すると、配列は各要素の文字列変換に基づいて各文字のUnicodeコードポイント値で並べ替えられます.
  • 89 sort()関数を使用して数値昇順でソート


    compareFunctionは、a、bの2つのパラメータを受け入れ、2つの数字の差が正の値か負の値かを利用して数字を昇順ソートすることができる.
    function compareNumbers(a, b) {
      return a - b;
    }

    ✅ continue


    86 break-繰り返し文で繰り返し文を行わずに終了したい場合に使用します.
    8680 continue-現在実行中の繰り返し文を停止し、次の繰り返し文を直接実行します.
    break文とは異なり、continueのfor、while文での動作は次のとおりです.
  • であり、ループでは条件ジャンプが行われる.
  • forサイクルでは、更新式にジャンプします.
  • continue文には、次のループでスキップするために、現在のループ文ではなくループ文としてマークされるオプションのラベルが含まれます.この場合、continue文はこのタグ文にネストする必要があります.
    これは他の宣伝で整理されます.
    for (let count = 1; count < 6; count++){
        if (count == 3) 
            continue;
        console.log("count = " + count);
    }
    // 1 2 4 5
    ソース:https://devjhs.tistory.com/114[キーボードと1日]
    参考資料|JavaScript ES 6-Setについて🎉
    コメント|配列の整列