JavaScript

 Computer >> コンピューター >  >> プログラミング >> JavaScript
  1. JavaScriptで2次元配列の最長増加パスを求める方法

    増加シーケンス(Increasing Sequence)とは増加シーケンスとは、隣り合う要素を見たときに、後ろの要素が前の要素以上であるような数列のことです。つまり、各要素が直前の要素と等しいか、それより大きければ増加シーケンスとみなされます。例えば、以下のような数列はすべて増加シーケンスです。4, 6, 8, 9, 11, 14 は増加シーケンス3, 3, 3, 3, 3, 3, 3 も増加シーケンス(要素が等しくてもよいため)問題の概要今回作成するのは、数値の2次元配列 arr を唯一の引数として受け取るJavaScript関数です。この関数は、配列内を「値が増加しながら進むパス」の中で最

  2. JavaScriptで指定範囲内の区間和(Range Sum)を持つペアをカウントする方法

    範囲和(Range Sum)とは? 範囲和 rangeSum(i, j) とは、配列のインデックス i から j(i ≤ j、両端を含む)までの要素の合計のことです。 問題の概要 整数の配列 arr を第1引数に、2つの数値 upper と lower を第2・第3引数として受け取るJavaScript関数を作成します。 この関数は、範囲 [lower, upper](両端を含む)に収まる区間和の個数を返す必要があります。 入力例 const arr = [1, 4, 3]; const upper = 5; const lower = 2; 出力例 この入力に対して、期待される出力は次のと

  3. JavaScriptで配列を波状(ジグザグ)パターンに並べ替える方法

    問題数値の配列 arr を唯一の引数として受け取るJavaScript関数を作成します。この関数は、並べ替え後の配列の要素が次のパターンに従うように並べ替える必要があります。arr[0] < arr[1] > arr[2] < arr[3]....このような並べ順は「波状ソート」や「ジグザグソート」と呼ばれることもあります。偶数番目のインデックスの要素は隣接する要素より小さく、奇数番目のインデックスの要素は隣接する要素より大きくなるように配置するのがポイントです。例として、関数への入力が次の場合を考えてみましょう。const arr = [1, 5, 1, 1, 6, 4];

  4. JavaScriptでソート済み2次元配列からN番目に小さい要素を求める方法

    問題の概要昇順にソートされた数値の2次元配列(行列)が与えられたとします。const arr = [ [ 1, 5, 9], [10, 11, 13], [12, 13, 15] ];この配列を第1引数として受け取り、整数 num を第2引数として受け取るJavaScript関数を作成します。関数は、配列 arr 内に存在する num 番目に小さい要素を返す必要があります。例えば、関数への入力が以下の場合を考えてみましょう。const arr = [ [ 1, 5, 9], [10, 11, 13], [12, 13, 15] ]; const

  5. JavaScriptで目標の合計値になる全ての組み合わせを数える方法

    問題 一意な整数の配列 arr を第1引数に、目標の合計値(target)を第2引数として受け取るJavaScript関数を作成する必要があります。 この関数は、同じ数値の繰り返し使用を許可したうえで、合計が目標値になるすべての組み合わせの数を数え、その結果を返さなければなりません。 例えば、関数への入力が次のような場合を考えてみましょう。 const arr = [1, 2, 3]; const target = 4; このとき、期待される出力は次の通りです。 const output = 7; 出力の説明 これは、合計が4になる組み合わせが以下の7通り存在するためです。 (1, 1, 1,

  6. JavaScriptで2つの配列から合計が最小となるペアを取り出す方法

    問題概要整数がソート済みの2つの配列 arr1 と arr2 を第1・第2引数として受け取るJavaScript関数を作成する必要があります。第3引数には数値 num が渡され、num は必ず両方の配列の長さより小さい値になるとします。この関数の役割は、指定された個数(num)のペアを選び出すことです。各ペアは、1つ目の要素を arr1 から、2つ目の要素を arr2 から取る必要があります。そのうえで、選ばれたペア同士の合計値ができる限り小さくなるように組み合わせを選択しなければなりません。最終的に、関数はこれら(num)個のペアをすべて格納した配列を返します。例えば、次のような入力が与えら

  7. JavaScriptで指定した値以下となる最大の部分長方形の合計を求めるアルゴリズム

    問題の概要2次元配列(数値の行列)と目標値 num を引数として受け取るJavaScript関数を作成します。この関数の目的は、行列内に存在するすべての長方形領域の中から、合計値が num を超えない範囲で最も大きいものを見つけ出し、その合計値を返すことです。つまり、「合計が目標値以下である長方形」の中で最大の合計を求めるという問題です。入力例const arr = [ [1, 0, 1], [0, -2, 3] ]; const num = 2;出力例const output = 2;出力の解説この場合、条件を満たす最適な長方形は次の部分行列です。[ [0, 1],

  8. JavaScriptで1つの爆弾で倒せる最大の敵の数を求めるアルゴリズム

    問題の概要2次元グリッドが与えられ、各セルは壁「W」、敵「E」、空きマス「0」(ゼロ)のいずれかです。この課題では、1つの爆弾を使って倒せる敵の最大数を返す関数を作成します。爆弾は、設置した地点から同じ行と列に存在するすべての敵を倒します。ただし、壁は非常に強固で破壊できないため、爆発の効果は壁にぶつかった時点で止まります。また、爆弾を設置できるのは空きマス「0」のみである点にも注意が必要です。入力例と出力たとえば、関数への入力が以下の場合を考えてみましょう。const arr = [ [0, E, 0, 0], [E, 0, W, E], [0, E, 0, 0]];このと

  9. JavaScriptで配列の各要素に二次関数f(x)を適用してソートする方法

    問題次のような二次関数が与えられています。f(x) = ax² + bx + cここで、a、b、c は3つの定数です。この課題では、ソート済みの整数配列 arr を第1引数に、a、b、c をそれぞれ第2、第3、第4引数として受け取るJavaScript関数を作成します。この関数は、配列 arr の各要素に関数 f(x) を適用し、その結果を昇順にソートした配列を返す必要があります。例えば、関数への入力が次のようであった場合を考えます。const arr = [-8, -3, -1, 5, 7, 9]; const a = 1; const b = 4; const c = 7;この場合、期待さ

  10. JavaScriptで同じ文字が近接しないように文字列を並べ替える方法

    問題 文字列 str を第一引数に、数値 num(str の長さ未満)を第二引数として受け取るJavaScript関数を作成する必要があります。 この関数は、文字列 str の文字を並べ替え、同じ文字同士が少なくとも num 文字以上の間隔で配置された新しい文字列を構築しなければなりません。つまり、同一の文字が互いに近すぎる場所に現れないようにする必要があります。 最終的に、構築した新しい文字列を返します。条件を満たす並べ替えが不可能な場合は、空文字列()を返してください。 入力例 関数への入力が以下の場合: const str = 'kkllmm'; 期待される出力 c

  11. JavaScriptで一意な数字のみで構成されるn桁までの数字を数える方法

    問題 JavaScriptで次のような関数を実装することを考えます。引数として数値 num を1つだけ受け取り、「num桁までの数字の中で、すべての桁が一意(重複なし)であるもの」の個数を返します。 例えば、関数への入力が次の場合: const num = 1; 出力は次のようになります: const output = 10; 出力の説明 0、1、2、3、4、5、6、7、8、9 の10個の数字は、いずれも1桁であり、それぞれに数字の重複がないためです。 実装例 const num = 1; const uniqueDigits = (num = 1) => { const dp

  12. JavaScriptで2つの配列の共通要素を取得する方法(重複要素も保持)

    問題 2つの配列 arr1 と arr2 をそれぞれ第1引数・第2引数として受け取る JavaScript の関数を作成する必要があります。 この関数は、両方の配列に共通して存在する要素(積集合)を求めます。さらに、ある要素が両方の配列に2回登場する場合には、結果の配列にもその要素を2回含めなければなりません。 例えば、関数への入力が次のような場合です。 const arr1 = [2, 7, 4, 6, 7, 4]; const arr2 = [7, 1, 9, 7, 4, 5]; このとき、期待される出力は次のようになります。 const output = [7, 7, 4]; 7 と

  13. JavaScriptで文字列内の子音だけを反転する方法

    問題の概要小文字の英字アルファベットのみで構成された文字列を引数として受け取るJavaScript関数を作成します。この関数が返すべきは、子音の並び順だけを逆順に入れ替えた新しい文字列です。母音(a・e・i・o・u)は元の位置にそのまま残ります。入力例const str = somestring;出力例子音「s, m, s, t, r, n, g」を逆順にすると「g, n, r, t, s, m, s」になり、これを母音を動かさずに元の位置へ当てはめると、次のような結果になります。const output = gonertsims;アプローチ:両端から走査するツーポインタ法この問題を効率的に解

  14. JavaScriptでCSSルールをスタイルシートに追加・削除する方法【insertRule()とdeleteRule()の使い方】

    JavaScriptを使えば、ページに読み込まれたスタイルシートに対して動的にCSSルールを操作できます。その中心的な役割を果たすのが insertRule() メソッドと deleteRule() メソッドです。insertRule(): スタイルシート内の指定した位置(インデックス)に新しいCSSルールを追加します。deleteRule(): 指定したインデックスにある既存のスタイルルールを削除します。以下の具体例を通じて、JavaScriptでスタイルシートへCSSルールを追加する方法を見ていきましょう。例1:insertRule()で新しいルールを追加する<!DOCTYPE ht

  15. CSSとJavaScriptで実装するライトボックスのアニメーション

    CSSとJavaScriptを組み合わせることで、Webページにおしゃれなライトボックス(Lightbox)を実装できます。ライトボックスとは、サムネイル画像をクリックした際に拡大画像が画面上にオーバーレイ表示される、よく使われるUIパターンのことです。本記事では、CSSの:target疑似クラスとトランジションを活用してライトボックスをスタイリングする方法を、具体的なコード例とともに解説します。 実装例 以下の例では、ページ内アンカー(#picture)へのリンクと:target疑似クラスを連動させることで、クリック操作だけでライトボックスの開閉を実現しています。画像の拡大表示にはtran

  16. 【JavaScript】文字列が同一部分文字列の繰り返しで構成されているか判定する方法

    問題概要文字列を1つだけ引数として受け取り、その文字列が「ある部分文字列を複数回連結したもの」になっているかどうかを判定するJavaScript関数を実装します。たとえば、関数への入力が次の場合:const str = 'thisthisthisthis';期待される出力は以下のとおりです。const output = true;出力の説明この文字列は「this」という部分文字列を4回繰り返して構成されているため、true が返されます。実装コードこの問題を解くコードは次のようになります。const str = 'thisthisthisthis';const

  17. JavaScriptで文字列を出現頻度の高い順に並べ替える方法

    問題 文字列を唯一の引数として受け取るJavaScript関数を作成します。 この関数は、元の文字列をもとに新しい文字列を生成し、出現回数が最も多い文字を先頭に配置し、以降は出現頻度の高い順(降順)に残りの文字を並べる必要があります。 たとえば、関数への入力が次の場合: const str = free; 出力は次のようになります。 const output = eefr; 出力の解説 eは2回出現するため先頭に配置され、その後に出現回数が1回ずつのfとrが続きます。 サンプルコード この問題を解くコードは以下の通りです。 const str = free; const frequency

  18. JavaScriptで二分探索木(BST)から目的のノードを削除する方法

    本記事では、JavaScriptで実装した二分探索木(Binary Search Tree:BST)から、指定した値を持つノードを削除する方法を解説します。 問題 まず、以下のコードを見てください。このコードは二分探索木のデータ構造を生成し、ノードを挿入する機能を提供します。 class Node{ constructor(data) { this.data = data; this.left = null; this.right = null; }; }; class BinarySearchTree{ construc

  19. JavaScriptで配列をnum個に分割!部分配列の最大合計を最小化する二分探索アルゴリズム

    問題概要負でない整数のみを含む配列 arr を第1引数に、整数 num(num < arr.length)を第2引数として受け取るJavaScript関数を作成します。関数の目的は、元の配列を空でない連続した部分配列にちょうど num 個に分割することです。その際、各部分配列の合計値の中で最大のものが最小になるように分割し、その最小化された「最大合計」を戻り値として返します。入力例const arr = [5, 1, 4, 8, 7];const num = 2;出力例const output = 15;出力の解説長さ5の配列を2つの部分配列に分割する方法は全部で4通りあります。それぞれ

  20. JavaScriptでBST(二分探索木)の左側の葉ノードの合計を求める方法

    問題概要 JavaScriptで、二分探索木(BST)のルートノードを唯一の引数として受け取り、左側の葉ノードに格納されたデータの合計を計算する関数を作成する必要があります。 ここでいう「左側の葉」とは、親ノードの左の子であり、かつ左右どちらの子も持たないノードのことを指します。 具体例 たとえば、次のような木構造を考えてみましょう。 8 / \ 1 10 / \ 5 17 この場合の出力は次のようになります。 const output = 6; 出力の解説 この木には値が 1 と 5 の2つの左側の葉ノードが存在するため、それらの合計である 6 が結果となります。 実装コード まず

Total 5937 -コンピューター  FirstPage PreviousPage NextPage LastPage CurrentPage:26/297  20-コンピューター/Page Goto:1 20 21 22 23 24 25 26 27 28 29 30 31 32