JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

配列の要素を並べ替えて連続した数列にできるか判定する方法 - JavaScript

問題の概要

数値の配列を受け取り、その要素を並べ替えることで連続した数列(連番)を形成できるかどうかを判定する JavaScript 関数を作成します。

たとえば、次のような配列が与えられた場合 −

const arr = [3, 1, 4, 2, 5];

この配列は 1 から 5 までの連続した整数として並べ替え可能なため、出力は次のようになります −

true

解決策:ソートを使ったアプローチ

最もシンプルな方法は、配列のコピーを作成して昇順にソートし、隣り合う要素がすべて 1 ずつ増加しているかどうかを確認することです。

コード例

以下がその実装コードです −

const arr = [3, 1, 4, 2, 5];
const canBeConsecutive = (arr = []) => {
   // 空の配列は false を返す
   if(!arr.length){
      return false;
   };
   // 元の配列を変更しないようコピーを作成
   const copy = arr.slice();
   copy.sort((a, b) => a - b);
   // 最小値から順に連続しているかチェック
   for(let i = copy[0], j = 0; j < copy.length; i++, j++){
      if(copy[j] === i){
         continue;
      };
      return false;
   };
   return true;
};
console.log(canBeConsecutive(arr));

コードの解説

この関数の処理の流れは以下の通りです。

  • 空配列のチェック: 配列が空の場合は false を返します。
  • 配列のコピー: slice() を使って元の配列を壊さないようにコピーを作成します。
  • ソート: 昇順に並べ替えます。比較関数 (a, b) => a - b を指定しないと文字列として比較されてしまうため注意が必要です。
  • 連続性の検証: 最小値から始めて、各要素が 1 ずつ増加しているかを確認します。途中で一致しなければ false を返します。

出力結果

コンソールには次の出力が表示されます −

true

計算量について

このアプローチでは、ソートに O(n log n)、連続性の検証に O(n) の計算量がかかるため、全体として O(n log n) となります。さらに効率化したい場合は、Set を活用して最大値・最小値から重複や欠落をチェックすることで、O(n) での判定も可能です。

  1. JavaScriptで配列を空にする方法まとめ【3つの手法と使い分けのポイント】

    JavaScriptで配列を空にする(初期化する)方法は複数あります。それぞれの手法には特徴や注意点があり、状況に応じて適切に使い分けることが重要です。この記事では、代表的な3つの方法と、それぞれのメリット・デメリットを詳しく解説します。まず、以下のような配列があると仮定します。let arr = [1, test, {}, 123.43];方法1:新しい空の配列で置き換えるarr = [];変数arrに新しい空の配列を再代入する方法です。最もシンプルかつ高速な手法として知られています。ただし注意点として、元の配列への参照がプログラムの他の場所に存在する場合、それらの参照は自動的に更新されませ

  2. JavaScriptの基本配列メソッド解説!push・pop・shift・unshift・spliceの使い方を実例付きで紹介

    JavaScriptには、配列を操作するための便利な組み込みメソッドが数多く用意されています。その中でも特によく使われるのが、要素の追加や削除を行う以下の5つの基本メソッドです。 JavaScriptの主要な配列メソッド一覧 メソッド説明 Array.push()配列の末尾に要素を追加します。 Array.pop()配列の末尾から要素を取り除きます。 Array.unshift()配列の先頭に要素を追加します。 Array.shift()配列の先頭から要素を取り除きます。 Array.splice()配列内の任意の位置で要素の追加・削除を行います。 これらのメソッドは、配列の