[Codility Lessons] 2. Arrays - CyclicRotation
9543 ワード
に答える配列要素に近い理解,数学的法則が見つかれば,式で解くことができる. の精度だけが重要であれば、一番前の要素を後ろに押して、前の要素の外でsliceを繰り返し解決することもできます.しかしこのとき,操作配列の演算は性能的に小さくないと思うので,それを一つの方法にした. の数学式を見つけるのは容易ではない場合は、すぐに配列相関関数を使用して解決することが望ましい. length-1*Vをコアとし、回転時に以下の値を見つけます.lengthで-1は、グリッドを移動するためです.1がなければ移動せず、自分の価格を呼ぶことになります.-2の場合は、2マス回転します.
https://gist.github.com/doong-jo/197d6fe48697fed16bc5d95ae60244cd
/*
[1, 2, 3, 4]
length: 4
V(K % length) index value answer
1 0 N[3] (index + length -1 * V) % length
1 1 N[0]
1 2 N[1]
1 3 N[2]
2 0 N[2] (index + length -1 * V) % length
2 1 N[3]
2 2 N[0]
2 3 N[1]
...
*/
function solution(A, K) {
const V = K % A.length;
const answer = A.map(
(_, index) => A[(index + (A.length - 1) * V) % A.length],
);
return answer;
}
回転ギャップ可変アレイ回転関数https://gist.github.com/doong-jo/197d6fe48697fed16bc5d95ae60244cd
/**
* Rotate array
* @param {number[]} A target number array (ex. [1, 2, 3, 4])
* @param {number} K rotate count
* @param {number} D rotate distance
*/
function rotateArray(A, K, D = 1) {
const V = ((A.length - D) * K) % A.length;
return A.map((_, index) => A[(index + V) % A.length]);
}
const r1 = rotateArray([1, 2, 3, 4], 1, 1);
const r2 = rotateArray([1, 2, 3, 4], 2, 4);
const r3 = rotateArray([1, 2, 3, 4], 1, 2);
const r4 = rotateArray([1, 2, 3, 4], 1, 4);
console.log(r1); // [ 4, 1, 2, 3 ]
console.log(r2); // [ 1, 2, 3, 4 ]
console.log(r3); // [ 3, 4, 1, 2 ]
console.log(r4); // [ 1, 2, 3, 4 ]
Reference
この問題について([Codility Lessons] 2. Arrays - CyclicRotation), 我々は、より多くの情報をここで見つけました https://velog.io/@doongdoong/Codility-Lessons-2.-Arrays-BinaryGapテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol