配列をシャッフルする


アルゴリズムは、私が奮闘する何かです.私が最近行った会社のインタビューやスクリーニングプロセスのいくつかは、アルゴリズムを巻き込んだ.誰かに話しかける前に排除されることはとても落胆している.最近、アルゴリズムの解法について意図しています.今度は私が取り組むthis Leetcode problem .

Given the array nums consisting of 2n elements in the form
[x1,x2,...,xn,y1,y2,...,yn].
Return the array in the form [x1,y1,x2,y2,...,xn,yn].


私の仕事は、カードのデッキのように一緒に配列の要素をシャッフルすることです.この問題はJavaScriptで簡単です.push() メソッド.
var shuffle = function(nums, n) {
    let arr = [];
    for ( let i=0; i<n; i++ ) {
        arr.push(nums[i], nums[i+n])
    };
    return arr;
};
  • 空の配列を宣言するarr 返り値
  • Aを始めるfor インデックスがn .
  • を返します.
  • push() 現在の指標nums[i] and nums[i + n] を返しますarr .
  • 反復の後n timesは新しい配列を返します.
    私がそれに近づいたとき、困難は増加しましたpush() . 私は、私がアクセスを必要とするインデックスを追跡するのを苦労していました.それを書いた後、私はパターンを見つけることができました.すべての反復を踏むことは本当に私が必要としたカウンタをクリアしました.

    私は4つの変数i, y, x, b . i 私のコードブロックのリターン配列の最初のインデックスを示します.y 戻り値配列の2番目のインデックスを示します.これらの2つの変数は2回の反復で増加した.x 入力配列の最初のインデックスを示します.b 入力配列の2番目のインデックスを示します.これら2つの変数はそれぞれの反復で1ずつ増分された.パターンをキャッチするために私は本当に徹底的にする必要がありました.その後、私はすぐに、私がする必要があるものを推論することができました.これは私の最終的な解決策です.
    var shuffle = function(nums, n) {
        const arr = [];
        let i = 0
        for ( let x=0; x < n; x++) {
            arr[i] = nums[x];
            arr[i+1] = nums[x+n];
            i+=2;
        };
        return arr;
    };
    
  • 空の配列を宣言するarr 返り値
  • カウンタを宣言するi ループの外側には、インクリメントされます.
  • Aを始めるfor インデックスまで実行されるループxn .
  • を返します.
  • セットarr[i] to nums[x]
  • セットarr[i+1] to nums[x+n]
  • 増加i 2によって
  • チェックするx < n
  • 配列を返します.