【ITニュース解説】Leetcode 189: Rotate Array JavaScript Solution.
2025年09月03日に「Dev.to」が公開したITニュース「Leetcode 189: Rotate Array JavaScript Solution.」について初心者にもわかりやすいように丁寧に解説しています。
ITニュース概要
JavaScriptで配列をk回ローテーションさせるLeetCodeの問題189の解決策を解説。配列をkで割った余りの回数だけ回転させるのが効率的。初期解法は、配列を2つに分割して結合するが、改善版ではコピー配列を使用し、各要素の新しい位置を計算して直接更新。どちらの解法も時間・空間計算量はO(n)。
ITニュース解説
このニュース記事は、LeetCodeというプログラミング練習プラットフォームの問題189番「Rotate Array(配列の回転)」のJavaScriptによる解決策を紹介している。この問題は、与えられた配列を右にk回回転させるというものだ。ここで、kは非負の整数である。
配列の回転とは、配列の要素を右方向にk個シフトさせる操作を指す。例えば、配列[1, 2, 3, 4, 5]を2回回転させると、[4, 5, 1, 2, 3]となる。
記事では、最初に直感的なアプローチとして、配列を2つの部分に分割する方法を提案している。具体的には、配列の最後のk個の要素と、それ以外の要素に分割する。そして、これらの2つの部分配列を結合し、元の配列にコピーすることで、配列を回転させる。
ただし、kの値が配列の長さよりも大きい場合があるため、最初にkを配列の長さで割った余りを計算する必要がある。これは、kが配列の長さの倍数である場合、回転は実質的に行われないため、余りの部分だけを考慮すれば良いからだ。例えば、配列の長さが7でkが10の場合、10 % 7 = 3となるため、3回回転させるのと同じ結果になる。
この最初のアプローチの実装例として、記事ではinitial solutionを提示している。このコードでは、まずk %= nums.lengthでkの値を調整し、kArrayとfirstPartArrayという2つの配列を作成して、それぞれ最後のk個の要素と、それ以外の要素を格納している。その後、rotatedArrでこれら2つを結合し、最後に元のnums配列にコピーしている。
次に、記事ではより効率的な改善されたアプローチを紹介している。このアプローチでは、元の配列のコピーを作成し、各要素の新しい位置を計算することで、直接元の配列を書き換える。
この改善されたアプローチの実装例として、記事ではimproved solutionを提示している。このコードでは、最初にnumsCopyで元の配列のコピーを作成する。次に、forループで配列の各要素を処理し、rotateIdx = (i + k) % nums.lengthで新しいインデックスを計算する。ここで、iは元のインデックス、kは回転数、nums.lengthは配列の長さである。%演算子(剰余演算子)を使用することで、新しいインデックスが配列の範囲を超えないようにしている。最後に、nums[rotateIdx] = numsCopy[i]で、コピーされた配列の要素を新しい位置に書き込む。
記事では、両方の解決策の計算量(時間計算量と空間計算量)がO(n)であると述べている。ここで、nは配列の長さである。これは、両方の解決策が配列のすべての要素を一度以上処理するためである。initial solutionでは、kArrayとfirstPartArrayという2つの配列を作成している分、メモリを余分に使用する。improved solutionではコピーを最初に作成するだけで済むため、メモリ効率が良い。
システムエンジニアを目指す初心者にとって、この問題は配列操作の基本的な理解を深めるのに役立つ。特に、配列のインデックス操作、剰余演算子の使い方、時間計算量と空間計算量の概念などを学ぶことができる。また、与えられた問題を複数の異なるアプローチで解決できることを理解し、それぞれの利点と欠点を比較検討する能力を養うことができる。さらに、コードの効率化(ここではメモリ効率)を意識することも重要であることを学べる。この問題を通して、プログラミングの基礎力と問題解決能力を向上させることができるだろう。