LeetCode 28 と 459 の解法:KMPアルゴリズムの実装と応用

LeetCode 28: 文字列の中で最初に一致するインデックスを検索する 問題リンク: 28. 找出字符串中第一个匹配项的下标 - 力扣(LeetCode) KMPアルゴリズムを使用して、部分文字列を効率的に検索します。ここでは、失敗時のバックトラックテーブル(Next/LPS配列)を構築し、メイン文字列とパターンを比較します。 Python実装例 class Solution: def build_lps(self, pa ...

7月8日 19:57 投稿

動的計画法による部分列問題の徹底攻略:1次元・2次元、連続・非連続の各パターン

1. 不相交の線 (LeetCode 1035) この問題は、一見すると幾何学的な制約があるように見えますが、本質的には「最長共通部分列 (LCS)」を求める問題と同じです。2つの配列間で線を引く際に交差させないという条件は、選ぶ要素の相対的な順序を維持することを意味します。 アルゴリズムの定義 dp[i][j] を、配列 data1 の最初の i 個の要素と、配列 data2 の最初の j 個の要 ...

7月7日 17:15 投稿

二分探索アルゴリズムの実践的まとめ

二分探索の基本原則 閉区間方式を推奨します。データ量が少ない場合は線形探索が適切です。探索終了時、iはtargetより大きい最初の要素を指し、jはtargetより小さい最初の要素を指します。配列にtargetが存在しない場合、挿入位置はiとなります。 74. 二次元行列探索 行列内の目標値探索手法。単一行/列の境界条件に注意。 public class MatrixSearcher { public bool ...

7月4日 23:34 投稿

各従業員の主所属部門を特定するSQLアプローチ

従業員と部門の関係を表すテーブルにおいて、各従業員に対して主となる部門IDを特定する問題を考えます。複数の部門に所属する従業員については、primary_flagが'Y'のレコードが主部門を示します。一方、単一の部門にのみ所属する従業員については、その部門が主部門となります。 この問題を解決する代表的な方法として、UNION演算子を用いた方法があります。このアプロー ...

7月4日 18:44 投稿

バックトラッキングアルゴリズムとその応用問題

組合せ問題(Leetcode77) // アプローチ: 1からnまでの数を再帰的に探索し、リストでk個の組み合わせが作成されたかを記録 // 各ループの開始値が前の値と重複しないように、開始インデックスを設定 class Solution { private List<List<Integer>> 結果; private List<Integer> 現在の組み合わせ; private int 目標サイズ; public ...

7月2日 17:53 投稿

動的プログラミングによる問題解決:フィボナッチ数、階段の登り方、最小コストでの階段登り

動的プログラミング問題へのアプローチ 動的プログラミング問題を解決するための5つのステップ: DP配列(DPテーブル)とそのインデックスの意味を定義する 漸化式を決定する DP配列の初期化方法を決定する(配列オーバーフローに注意) 計算順序を決定する DP配列の具体例を導出する フィボナッチ数 フィボナッチ数列(通常 F(n) で表される)は、0 と 1 から始まり、そ ...

6月24日 21:13 投稿

LeetCode問題:最小反転操作回数

問題 2612. 最小反転操作回数 整数 n と、範囲 [0, n - 1] 内の整数 p が与えられます。これらは、長さが n でインデックスが 0 から始まる配列 arr を表します。この配列では、インデックス p の位置だけが 1 で、他のすべての要素は 0 です。 同時に、整数配列 banned も与えられます。この配列には、配列内のいくつかの位置が含まれています。banned の第 i 個 ...

6月13日 20:44 投稿

Javaで学ぶリンクリストの基本操作とアルゴリズム

本日の課題 LeetCode 203. リンクリスト要素の削除 LeetCode 707. リンクリストの設計 LeetCode 206. リンクリストの反転 基本概念の整理 ノードの追加処理では、新しいノード(current.next)を先に処理し、古いノード(previous.next)を後から処理します。 ノードの削除では、現在のノードを削除するには、その前のノードを知る必要があります。そのため、currentとp ...

6月11日 21:03 投稿

LeetCodeスライディングウィンドウパターン徹底解説

スライディングウィンドウ入門 「連鎖・部分文字列・配列の問題は、まず双方向ポインタを考えよ。 双方向ポインタ三兄弟、それぞれに魅力あり。 速いポインタと遅いポインタは魔法使い、連結リスト操作に敵なし。 マージソートで中点を探し、連結リストの循環を判定。 左右ポインタが最も一般的、配列の両端から中央へ。 反転配列にはこれを頼れ、二分探索は弟分。 スライ ...

6月8日 18:46 投稿

最長有効括弧の探索:スタックと動的計画法によるアプローチ

問題の説明: '(' と ')' のみからなる文字列が与えられます。最長の有効な(形式が正しく連続している)括弧部分文字列の長さを見つけてください。 例 1: 入力:s = "(()" 出力:2 説明:最長の有効な括弧部分文字列は "()" です 例 2: 入力:s = ")()())" 出力:4 説明:最長の有効な括弧部分文字列は "()()" です 例 3: 入 ...

6月4日 17:25 投稿