JavaScript

 Computer >> コンピューター >  >> プログラミング >> JavaScript
  1. 【JavaScript】線形時間O(n)で配列内の2つの整数の最大積を求める方法

    本記事では、正の数と負の数が混在する数値配列を受け取り、たった1回の走査(線形時間 O(n))で「2つの数値の積」の最大値を返すJavaScript関数の実装方法を解説します。 アプローチのポイント 最大積を求めるうえで重要なのは、次の2つのケースを必ず比較することです。 配列内の最も大きい2つの数の積(例:8 × 7) 配列内の最も小さい(絶対値の大きい負の)2つの数の積(例:-5 × -4 = 20) 負の数同士を掛けると正になるため、「小さい方の2つの数」の積が「大きい方の2つの数」の積を上回るケースがあります。そこで、配列を1回だけ走査しながら「大きい方の上位2つ」と「小さい方の下

  2. 【JavaScript】2番目の文字列から1番目の文字列のすべての文字を削除する方法

    概要特定の順序で並んでいない文字を含む2つの文字列があるとします。ここでは、これらの2つの文字列を受け取り、1番目の文字列に含まれるすべての文字を除外した、2番目の文字列の修正版を返す関数を作成します。例として、次のような文字列を用意します。const first = hello world;const second = hey there;この場合、「hey there」から「hello world」に含まれる文字(h、e、l、o、w、r、d)を取り除くと、結果として「yt」が得られます。実装の考え方以下が、1番目の文字列のすべての文字を2番目の文字列から削除する関数です。const rem

  3. JavaScriptで文字列内のすべての単語を逆順にする方法

    本記事では、文字列を受け取り、元の文字列に含まれるすべての単語を逆順に並べ替えた新しい文字列を返すJavaScript関数の作成方法を解説します。 要件の確認 まず、具体的な例で動作を確認しましょう。次のような元の文字列があったとします。 Hello World how is it outside この場合、期待される出力は以下の通りです。各単語内の文字の順序が反転しますが、単語自体の並び順(位置)は元のまま維持されます。 olleH dlroW woH si ti edistuo 実装の考え方 この処理は、以下の手順で実現できます。 split( ):文字列をスペースで分割し、単語ごとの配

  4. JavaScriptで文字列から重複していない文字を削除する方法

    この記事では、JavaScriptを使って、文字列に含まれる重複していない文字(1回しか出現しない文字)をすべて削除し、重複している文字だけを残した新しい文字列を返す関数の作り方を解説します。 要件と出力例 たとえば、入力文字列が次のような場合を考えてみましょう。 teeth_foot このとき、期待される出力は以下のとおりです。 teetoot 「t」「e」「o」はそれぞれ2回以上出現しているためそのまま残り、1回しか出現していない「h」「_」「f」は削除されます。 実装コード それでは、実際のコードを見てみましょう。 {      &nb

  5. JavaScriptで醜い数(Ugly Number)を判定する方法

    醜い数(Ugly Number)とは? 10進法において、醜い数(Ugly Number)とは、素因数が 2、3、5 のみである正の整数のことを指します。 たとえば、1 から 10 までの整数はすべて醜い数です。また、12(= 2 × 2 × 3)も素因数が 2 と 3 だけなので醜い数に含まれます。一方で、14(= 2 × 7)のように、それ以外の素因数を持つ数は醜い数ではありません。 実装のポイント 今回の課題は、数値を受け取り、それが醜い数かどうかを判定する JavaScript 関数を作成することです。 判定方法はシンプルで、対象の数値を 2、3、5 の順に割り切れる限り割り続け、最

  6. 【JavaScript入門】文字列が指定した文字列で終わっているかどうかを判定する方法

    JavaScriptでは、2つの文字列(string1 と string2)を受け取り、string1 が string2 で終わっているかどうかを判定する関数を実装することができます。動作イメージたとえば、次のようなケースを考えてみましょう。The game is on この場合、「on」で終わっているので true を返すべき一方、次の例では false を返します。the game is off この場合、「of」で終わっていないため false を返すべき実装コードそれでは、実際にコードを書いてみましょう。ここでは、substr() メソッドを使って末尾の部分文字列を取り出し、比較する

  7. JavaScriptで2つの配列が等しいかどうかを判定する方法

    本記事では、2つの数値配列(firstとsecond)を受け取り、それらが等しいかどうかを判定するJavaScript関数の実装方法を解説します。「等しい」の定義ここでは、配列の同等性を次の2つの条件のいずれかを満たす場合に成立するものと定義します。要素の並び順に関係なく、両方の配列が同じ要素を含んでいる場合1つ目の配列の全要素の合計と、2つ目の配列の全要素の合計が一致している場合具体例[3, 5, 6, 7, 7] と [7, 5, 3, 7, 6] は等しい配列 [1, 2, 3, 1, 2] と [7, 2] も等しい配列(合計が同じため) しかし [3, 4, 2, 5] と [2,

  8. 【JavaScript】配列内に過半数を占める要素があるかを判定してtrue/falseを返す方法

    本記事では、重複した値を含む数値の配列を受け取り、配列の長さを n としたときに n/2 回よりも多く出現する要素(過半数要素)が存在するかどうかを判定する JavaScript 関数を作成します。該当する要素が存在すれば true を、存在しなければ false を返します。 アプローチ:ボイヤー・ムーア多数決アルゴリズム この問題は「ボイヤー・ムーア多数決アルゴリズム(Boyer–Moore Voting Algorithm)」を用いることで、時間計算量 O(n)、追加メモリ O(1) という効率的な形で解くことができます。処理は大きく分けて次の2段階です。 候補の決定:配列を先頭から順

  9. JavaScriptで配列のリーダー要素を抽出する方法

    リーダー要素とは数値の配列において、その要素より右側にあるすべての要素よりも大きい場合、その要素は「リーダー」と呼ばれます。つまり、配列の右端に向かって見たとき、自分より大きな数が一つも存在しない要素がリーダー要素です。本記事では、数値の配列を受け取り、このリーダー要素の条件を満たすすべての要素を含む部分配列を返すJavaScript関数を紹介します。具体例例えば、以下の入力配列を考えてみましょう。入力配列:[23, 55, 2, 56, 3, 6, 7, 1]期待される出力:[56, 7, 1]出力が [56, 7, 1] となる理由を見てみましょう。56はその右側にあるすべての要素(3、6

  10. 【JavaScript】最初の文字列が指定した文字列で始まる場合にtrueを返す方法

    JavaScriptでは、2つの文字列を受け取り、最初の文字列が2番目の文字列で始まっているかどうかを判定する関数を簡単に作成できます。処理の内容例えば、以下のような2つの文字列が与えられたとします。1つ目の文字列:「Disaster management report」 2つ目の文字列:「Disas」この場合、1つ目の文字列は「Disas」で始まっているため、関数は true を返す必要があります。実装例それでは、実際にコードを書いてみましょう。ここでは、substr() メソッドを使って先頭部分の文字列を取り出し、比較する方法を紹介します。 {    &nbs

  11. JavaScriptでメルセンヌ素数を判定する方法

    数学において、メルセンヌ素数とは、ある整数 n に対して M(n) = 2^n − 1 という形で表すことができ、かつ実際に素数である数のことを指します。 たとえば、最初の4つのメルセンヌ素数は次のとおりです。 3 = 2^2 − 1 7 = 2^3 − 1 31 = 2^5 − 1 127 = 2^7 − 1 本記事では、JavaScriptの関数を使って、与えられた数がメルセンヌ素数であるかどうかを判定する方法を解説します。 判定のアプローチ メルセンヌ素数の判定には、次の2つの条件を確認する必要があります。 その数が素数であること その数に1を加えた値が、2の累乗であること まず

  12. JavaScriptで文字列内の「子音」と「母音・その他の文字」の数の差を求める方法

    本記事では、特定の文字列を引数として受け取り、その文字列に含まれる「子音の数」と「母音およびその他の文字の合計数」の差を返すJavaScript関数の作成方法を解説します。 例えば、次のような文字列が与えられた場合を考えてみましょう。 "HEllo World!!" この文字列には、子音が7個、母音が3個、その他の文字(スペースや記号)が3個含まれています。したがって、出力は次のように計算されます。 |7 − (3+3)| = 1 つまり、この場合の出力は 1 となります。それでは、この関数のコードを実際に書いてみましょう。 コード例 const str = 'HE

  13. JavaScriptで数値の桁を並べ替えて最大数と最小数の差を求める方法

    問題の概要 正の整数 n を引数に受け取り、その数字(各桁)を並べ替えることで作れる「最大の数」と「最小の数」の差を返す関数 maximumDifference() を作成します。 具体例 例えば、n = 203 の場合を考えてみましょう。 各桁の数字から作れる最大の数は 320 同様に最小の数は 23(先頭に0が来ないよう、0を一の位に配置) したがって、差は次のように計算されます。 320 - 23 = 297 つまり、この場合の出力は 297 となります。 コード実装 それでは、実際に関数を実装してみましょう。基本的なアプローチはシンプルです。数値を文字列に変換して1桁ずつ分解し

  14. JavaScriptで「不器用な階乗(Clumsy Factorial)」問題を解く方法

    通常、正の整数 n の階乗は、n 以下のすべての正の整数をかけ合わせた値として定義されます。例えば、factorial(10) = 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 のような形です。 一方、今回取り上げる「不器用な階乗(Clumsy Factorial)」では、整数を降順に並べたうえで、乗算の代わりに「乗算(*)→ 除算(/)→ 加算(+)→ 減算(-)」という固定された順序の演算を繰り返し適用していきます。 例えば、clumsy(10) = 10 * 9 / 8 + 7 - 6 * 5 / 4 + 3 - 2 * 1 となります。ただし、これらの演

  15. JavaScriptで配列の逆インデックス×要素の合計を求める方法

    逆インデックスとの積の合計とは JavaScriptでは、配列の各要素に逆インデックス(後ろから数えた位置)を掛け、その合計を求めたい場面があります。 まず、次のような数値の配列を用意します。 const arr = [3, 6, 7, 3, 1, 4, 4, 3, 6, 7]; この配列には10個の要素が含まれているため、最後の要素のインデックスは9になります。 今回求めたいのは、「各要素 × 逆順のインデックス」の総和です。具体的には、次のような計算になります。 (9 * 3) + (8 * 6) + (7 * 7) + (6 * 3) + ... 配列の末尾まで続く 先頭の要素「3」は逆

  16. JavaScriptで値を指定してオブジェクトのキーを検索する方法

    JavaScriptでは、「オブジェクトの中に特定の値が存在するか」「その値はどのキーに紐づいているのか」を調べたい場面に出会うことがあります。本記事では、値を渡すとその値を持つすべてのキーを配列で返すカスタムメソッド keysOf() を、Object.prototype に追加する形で実装する方法を解説します。 サンプルデータとなるオブジェクト まず、次のようなオブジェクトを例に考えてみましょう。 const obj = { name: Vivek Sharma, occupation: Software Engineer, age: 23, contact

  17. JavaScriptで配列からn回以上出現する要素をすべて抽出する方法

    数値や文字列のリテラルが含まれる配列があり、その中には重複した要素も存在します。ここでの課題は、正の整数 n を唯一の引数として受け取り、その引数で指定された回数 n 回以上 出現するすべての要素からなる部分配列を返す関数を作成することです。 たとえば「3回以上出現している要素だけを取り出したい」といったケースを想定しています。それでは、この関数を実装していきましょう。 アプローチ:Map()で出現回数を管理する 各要素の出現頻度を記録するために Map() を使用します。配列を走査しながら出現回数をカウントし、指定された回数に達した時点でその要素を結果配列に追加することで、同じ要素が結果に

  18. JavaScriptでソートせずに配列の最大値と最小値の差を求める方法

    ランダムな順序で並んだ数値の配列が与えられたとき、その配列を一切並べ替えることなく、含まれる最大値と最小値の差を返す関数を作成するのが今回の課題です。配列をソートして最初と最後の要素を見る方法もありますが、ソートには O(n log n) の計算量が必要です。そこで本記事では、Array.prototype.reduce() を使って配列を一度だけ走査し、最大値と最小値を同時に追跡する効率的なアプローチを紹介します。この方法なら計算量は O(n) で済み、元の配列も変更されません。実装例まず、初期値として max: -Infinity と min: Infinity を持つオブジェクトをアキュ

  19. JavaScriptで配列から連続して繰り返されない最初の要素のインデックスを見つける方法

    問題の概要数値や文字列のリテラルが格納された配列があり、そのほとんどの要素は隣り合う形で繰り返し出現しています。今回の課題は、この配列を引数として受け取り、「連続して繰り返されていない」最初の要素のインデックスを返す関数を実装することです。もし該当する要素が配列内にひとつも存在しない場合は、-1 を返す仕様とします。それでは、実際のコードを見ていきましょう。実装の考え方アプローチはシンプルです。for ループで配列を先頭から順に走査し、現在の要素と隣接する次の要素を比較します。両者が異なる場合:これまでに連続する繰り返しが検出されていなければ(カウントが0なら)、その時点のインデックスを答えと

  20. 【JavaScript】ソートせずに配列から上位2つの要素(最大値トップ2)を1パスで取得する方法

    JavaScriptには、並び順がバラバラの数値が格納された配列があります。ここでの課題は、この数値配列を受け取って、配列内で最も大きい2つの要素(上位2要素)だけを抽出し、新しい配列として返す関数を書くことです。 さらに重要な条件として、処理は1パス(ワンパス)で完了させる必要があります。つまり、forループは1回だけ使う、あるいはES6の配列メソッドを利用する場合も1回の呼び出しにとどめ、ネストした処理(二重ループなど)は避け、時間計算量をO(n) の線形時間に保たなければなりません。 解決策:Array.prototype.reduce() を使う この問題は、Array.prototy

Total 5937 -コンピューター  FirstPage PreviousPage NextPage LastPage CurrentPage:113/297  20-コンピューター/Page Goto:1 107 108 109 110 111 112 113 114 115 116 117 118 119