-
JavaScriptで文字列が同じパターンの繰り返しかどうかを判定する方法
はじめにJavaScriptでは、文字列を引数として受け取り、その文字列が同じ文字パターンの繰り返しで構成されているかどうかを判定する関数を求められることがあります。例えば、入力文字列が carcarcarcar の場合、car というパターンが繰り返されているため、結果は true となります。一方、繰り返しパターンが見つからない場合は false を返します。入力例const str = carcarcarcar;期待される出力const output = true;アルゴリズムの考え方文字列が繰り返しパターンを持つかどうかを確認するには、以下の条件を利用します。繰り返し単位の長さは、文字
-
JavaScriptで整数リスト内の2つの数値の最大積を求める方法
問題の概要整数の配列を唯一の引数として受け取るJavaScript関数を作成する必要があります。この関数の目的は、配列内の任意の2つの要素を掛け合わせたときに得られる最大の積を見つけることです。ただし、線形時間(O(n))かつ定数空間(O(1))で処理を完了しなければならないという条件が課されています。例入力配列が次の場合を考えてみましょう。const arr = [3, 9, 2, 1, 0];このとき、出力は次のようになります。const output = 27;これは、3と9を掛け合わせた27が最大の積となるためです。アプローチの解説最大の積が生まれるのは、次の2つのケースのいずれかです
-
【JavaScript】文字列内の文字がすべて一意かどうかを判定する方法
JavaScriptで、引数として文字列を1つ受け取り、その文字列に含まれるすべての文字が一意(重複なし)であれば true を、1文字でも重複があれば false を返す関数を作成してみましょう。アプローチ:ハッシュセットの活用この問題はハッシュセット(JavaScriptでは Set オブジェクト)を使うことで効率的に解決できます。基本的な考え方は次のとおりです。文字列を1文字ずつ走査しながら、遭遇した文字をセットに記録していく。走査中に、すでにセットへ登録済みの文字を見つけたら、その時点で false を返す。最後まで重複が見つからなければ、すべての文字が一意であるため true を返す
-
JavaScriptでパスカルの三角形のn行目の要素を求める方法
パスカルの三角形とは パスカルの三角形は、前の行の隣接する要素同士を足し合わせていくことで構成される、三角形状の数列配置です。各行の両端は必ず1となり、内側の各要素はそのすぐ上にある2つの要素の和になります。 パスカルの三角形の最初のいくつかの要素は以下の通りです。 求めるもの 今回は、正の整数 num を唯一の引数として受け取り、パスカルの三角形の num 行目に存在するすべての要素を配列として返すJavaScript関数を作成します。 たとえば、入力が次の場合: const num = 9; 期待される出力は以下のようになります。 const output = [1, 9, 36, 8
-
JavaScriptで合計がnになる最小個数の完全平方数を動的計画法で求める方法
問題の概要 正の整数 num を唯一の引数として受け取るJavaScript関数を記述する必要があります。 この関数の目的は、合計が入力値と一致するような完全平方数(平方数)の組み合わせを見つけることです。ただし、使用する完全平方数の個数はできるだけ少なくしなければなりません。 例 入力が以下の場合: const num = 123; 出力は次のようになります: const output = 3; これは 123 = 121 + 1 + 1 と表せるためです。121は11の二乗なので、3つの完全平方数で123を構成できています。 アプローチ:動的計画法(DP) これは古典的な動的計画法(Dy
-
JavaScriptでランダムな文字列を使って配列内の名前を形成できるか判定する方法
JavaScriptでは、文字列の各文字の出現回数を数えることで、ある文字列が別の文字列の組み合わせで作れるかどうかを効率的に判定できます。本記事では、配列に含まれる名前の中から、指定されたランダムな文字列だけで完全に構成できる要素を見つけ出す関数の実装方法を解説します。 問題の概要 まず、次のような名前を格納した文字列の配列があるとします。 const arr = [Dinesh, Mahesh, Rohit, Kamal, Jatin Sapru, Jai]; そして、ランダムな文字の集まりからなる文字列が1つ与えられます。 const str = lsoaakjm; ここで求められるのは
-
JavaScriptで数値内の連続するn桁の最大積を求める方法
2つの数値を第1引数と第2引数として受け取るJavaScript関数を作成します。ここでは、これらをそれぞれ m と n と呼ぶことにします。1つ目の数値 m は一般に複数桁の数値であり、2つ目の数値 n は常に m の桁数より小さい値であるとします。この関数は、m の中から連続する n 個の桁を取り出したとき、その積が最大になるグループを見つけ出す必要があります。例入力が以下の場合について考えてみましょう。const m = 65467586; const n = 3;このときの出力は次のようになります。const output = 280;理由は、7 × 5 × 8 = 280 となり、こ
-
JavaScriptで配列内の数値とそのn倍の関係を検出する方法
問題の概要整数の配列を第一引数として、数値 n を第二引数として受け取るJavaScript関数を作成する必要があります。この関数は、配列内に「一方が他方のn倍」という関係を満たす2つの数値が存在するかどうかを判定します。そのようなペアが存在すれば true を返し、存在しなければ false を返します。入力例配列と数値が以下の場合:const arr = [4, 2, 7, 8, 3, 9, 5]; const n = 4;出力例このときの出力は次のようになります。const output = true;その理由は、配列内に 2 と 8 という数値が存在し、以下の関係が成り立つからです。8
-
JavaScriptで配列内の各要素の出現回数が一意かどうかを判定する方法
本記事では、整数の配列を第1引数(唯一の引数)として受け取り、配列内に存在するすべての整数の出現回数が一意(ユニーク)であるかどうかを判定するJavaScript関数を作成します。問題の概要この関数は、配列内の各要素が出現する回数が互いに異なる場合には true を返し、同じ出現回数を持つ要素がひとつでも存在する場合には false を返す必要があります。入力例const arr = [7, 5, 5, 8, 2, 4, 7];出力例const output = false;この場合の出力が false になる理由は、整数 7 と 5 の両方が2回ずつ出現しており、出現回数が重複しているためで
-
JavaScriptで階乗から元の数値を逆算して求める方法
本記事では、数値を唯一の引数として受け取り、その数値が「ある整数の階乗」と一致するかどうかを判定するJavaScript関数の作成方法を解説します。 問題の概要 作成する関数には、以下の要件があります。 引数として受け取った数値と等しい階乗を持つ整数が存在するかどうかを確認する 該当する整数が存在する場合は、その整数を返す 存在しない場合は、-1 を返す 例えば、入力が 720 の場合を見てみましょう。 const num = 720; 720 = 6 × 5 × 4 × 3 × 2 × 1 = 6! となるため、期待される出力は 6 です。 const output = 6;
-
JavaScriptで実装する特殊なソートアルゴリズム ― 偶数は昇順・奇数は降順に並べ替える
問題の概要 整数の配列を唯一の引数として受け取るJavaScript関数を作成します。この関数は、次の条件に従って配列を並べ替える必要があります。 すべての偶数は昇順(小さい順)に並べる すべての奇数は降順(大きい順)に並べる 偶数と奇数の相対的な位置関係は元のまま維持する 入力例 たとえば、入力配列が次のような場合を考えます。 const arr = [12, 17, 15, 24, 1, 6]; このとき、期待される出力は以下のとおりです。 const output = [6, 17, 15, 12, 1, 24]; 偶数(12, 24, 6)を昇順に並べると「6, 12, 24」、奇
-
JavaScriptで配列内の「値と出現頻度が一致する整数」を見つける方法
本記事では、整数の配列を引数に受け取り、「その値自身と出現回数が一致する整数」が存在するかどうかを判定する JavaScript 関数の実装方法を解説します。例えば、ある整数 4 が配列内にちょうど 4 回出現している場合、この整数は条件を満たしています。少なくとも 1 つでも該当する整数が存在すればその値を返し、存在しない場合は -1 を返します。問題の概要以下のような配列を考えてみましょう。const arr = [3, 4, 3, 8, 4, 9, 7, 4, 2, 4];各要素の出現回数を数えると次のようになります。2: 1 回3: 2 回4: 4 回 ← 値と出現回数が一致!7: 1
-
JavaScriptで偶数・奇数インデックスのペアを配列内で入れ替える方法
本記事では、リテラルからなる配列を唯一の引数として受け取り、偶数インデックス同士および奇数インデックス同士の隣接ペアを入れ替えるJavaScript関数の実装方法を解説します。要件求められる処理は次のとおりです。連続する偶数インデックス同士の要素を入れ替える連続する奇数インデックス同士の要素を入れ替える入れ替えは新しい配列を作らず、元の配列に対してin-place(その場で)行う具体例たとえば、入力配列が次の場合を考えてみましょう。const arr = [0, 1, 2, 3, 4, 5, 6, 7, 8];このとき、期待される出力は次のようになります。const output = [2,
-
JavaScriptで指定した個数の要素による配列の重複順列をすべて生成する方法
はじめに リテラル値の配列を第1引数として、数値を第2引数として受け取るJavaScript関数を作成する必要があります。この関数は、第2引数で指定された個数と同じ長さを持ち、入力配列の要素から作り得るすべての順列(重複あり)を格納した配列を返すものです。 要件の整理 例えば、入力配列と数値が以下のような場合を考えてみましょう。 const arr = [k, 5]; const num = 3; この場合、期待される出力は次のようになります。各要素は長さ3の配列で、「k」と「5」の組み合わせがすべて網羅されています。 const output = [ &n
-
JavaScriptで数値の各桁の素数を合計する方法
本記事では、JavaScriptで1つの数値を受け取り、その各桁の中から素数である数字のみを合計して返す関数の作成方法を解説します。問題の概要引数として1つの数値を受け取るJavaScript関数を作成します。この関数は、その数値を構成する各桁のうち、素数となる数字(2、3、5、7)だけを抜き出して合計し、その結果を数値として返す必要があります。具体例例えば、入力が以下の場合:const num = 67867852;期待される出力は次のとおりです:const output = 21;これは、67867852 の各桁(6、7、8、6、7、8、5、2)のうち、素数である「7」「7」「5」「2」を
-
JavaScriptで数値配列から欠落している要素を効率的に見つける方法
本記事では、長さnの数値配列を受け取り、その中で欠落しているたった1つの整数を見つけるJavaScript関数を作成します。配列には本来0からnまでの整数がすべて含まれているはずですが、そのうち1つだけが欠けています。しかも、どの数字が欠けているのかは事前に分からず、配列もソートされていません。 問題のポイント 配列の長さはnで、0〜nまでの整数が1つだけ欠けた状態で格納されている 配列はソートされていない 線形時間(O(n))かつ定数領域(O(1))で解決する必要がある 解決のアプローチ:合計値の差を利用する 配列には0からnまでの数字が1つだけ欠けて含まれています。ここで「0からnまで
-
JavaScriptで類似文字列のグループ数を求める方法
問題の概要2つの文字列 str1 と str2 は、str1 の異なる位置にある2つの文字を入れ替えることで str2 と一致させられる場合、「類似(similar)」していると定義されます。また、2つの文字列が完全に等しい場合も類似しているとみなします。例えば、tars と rats は類似しています(0番目と2番目の文字を入れ替えることで一致)。また rats と arts も類似しています。しかし star は tars、rats、arts のいずれとも類似していません。これらの文字列は、類似性によって次の2つの連結グループを形成します。{tars, rats, arts} と {sta
-
JavaScriptで整数配列を同じ平均値を持つ2つのグループに分割できるか判定する方法
問題の概要 JavaScriptで、整数の配列を唯一の引数として受け取る関数を作成することを考えます。この関数の役割は、入力配列の要素を2つのグループに分割したとき、両方のグループの平均値がちょうど等しくなるような組み合わせが存在するかどうかを判定することです。なお、2つのグループに含まれる要素数は同じである必要はありません。 条件を満たす組み合わせが存在すれば関数は true を返し、存在しなければ false を返します。 具体例 たとえば、入力配列が次の場合を考えてみましょう。 const arr = [6, 3, 2, 8, 1, 5, 7, 4]; このときの出力は次の通りです。
-
JavaScriptで指定範囲内のアームストロング数をすべて求める方法
アームストロング数とはアームストロング数(Armstrong Number)とは、n桁の正の整数において、各桁の数字をn乗した値の総和が元の数と等しくなる数のことです。以下のように定義されます。abcd... = a^n + b^n + c^n + d^n + ...例えば、153は3桁の数であり、1³ + 5³ + 3³ = 1 + 125 + 27 = 153 となるため、アームストロング数に該当します。実装の概要ここでは、範囲の開始値と終了値の2つの数値を含む配列を受け取り、その範囲内に存在するすべてのアームストロング数を配列として返すJavaScript関数を作成します。範囲の端の数が
-
【JavaScript】異なるインデックスにある同じ値のペアを数える方法
問題の概要整数の配列を第一引数(唯一の引数)として受け取るJavaScript関数を作成する必要があります。この関数の役割は、配列の中から「値が等しいが、インデックス(位置)が異なる」要素のペアの総数を数えて返すことです。具体例を見てみましょう。入力配列が以下の場合:const arr = [7, 9, 5, 7, 7, 5];期待される出力は次のとおりです。const output = 4;これは、条件を満たすペアとして [7, 7] の組み合わせが3つ、[5, 5] の組み合わせが1つ存在し、合計4ペアとなるためです。解決のアプローチ最も効率的な方法は、ハッシュマップ(オブジェクト)を活用