Java

Java コーディング演習:配列・文字列・コレクション10

計算から始め、問題に応じて保持すべき状態がどう変わるかを追います。主要な演習には、完全な Java の解法、入力条件、アルゴリズムを選ぶ理由を示しています。

配列と数値の範囲

符号と添字の対応を確認してから int と long を選びます。続いて、積が int の範囲を超える数列を扱います。

  1. Java の IntStream で符号付きの値を合計する

    絶対値と対応する真偽値の符号を IntStream で組み合わせます。相殺、全要素が負の場合、int の範囲、配列の長さが等しいという契約を確認します。

  2. Java の配列の内積:IntStream と整数の範囲

    IntStream で配列の同じ位置の要素を掛けて合計します。符号、int の範囲、乗算でオーバーフローする前に型を拡張する理由を説明します。

  3. Java で x 間隔の数列を生成する:乗算前の型拡張

    IntStream で x から x*n までの n 個の値を生成します。mapToLong だけでは int のオーバーフローを防げない理由と、正・負・ゼロの間隔を確認します。

文字列と変換の順序

数字の英単語にはリテラル置換を使い、正規化の順序を保ちます。その後、スタックで隣接する同一文字のペアを削除します。

  1. Java の String.replace で英語の数字名を変換する

    数字と zero から nine の単語が混ざった有効な入力をリテラル置換で正規化します。replace と replaceAll の違い、整数の範囲と適用条件を説明します。

  2. Java の新しい ID 推薦:正規化の順序と切り詰め

    Optional のチェーンとループで ID を正規化します。連続するドット、フィルター後の空文字、切り詰め後の処理、補完、ロケールへの非依存性を確認します。

  3. Java の ArrayDeque スタックで隣接する同一文字のペアを削除する

    スタックで隣接する同一文字のペアを削除します。接頭辞の不変条件、連鎖する削除、百万文字の境界と時間・空間計算量を説明します。

個数・状態・順序

名前の出現回数と種類数を区別し、キャッシュの直近の利用順序を追います。比率の順位付けでは同率時の基準を明示します。

  1. Java で名前ごとの頻度から未完走者を見つける

    HashMap で参加者の頻度から完走者の頻度を引きます。Set の差では扱えない同姓同名と、未完走者が一人という条件を説明します。

  2. Java の Ponketmon:答えが min(種類数, N/2) になる理由

    HashSet で種類を数え、選択上限を達成できることを示します。最大種類数の計算と実際の選択の構築を区別します。

  3. Java の LRU キャッシュ:LinkedHashMap のアクセス順を使う

    アクセス順の LinkedHashMap で LRU を再現し、ヒット時の更新、追い出し、大文字小文字を区別しないキー、容量ゼロ、コストモデルの前提を確認します。

  4. Java の失敗率ソート:分母・同率・long の積

    停止人数と到達人数を数え、long の交差積で失敗率を正確に比較します。未到達のステージ、全クリア、同率時の番号順を扱います。