動的計画法による部分列問題の解法
問題1:最長増加部分列
最長増加部分列(Longest Increasing Subsequence, LIS)問題は、与えられた数列から、要素が厳密に増加する順序で並んでいる最長の部分列を見つける問題です。
class Solution {
public:
int lengthOfLIS(vector<int>& arr) {
// 1. DPテーブルの作成
int size = arr.size();
vector<int> dp(size, 1) ...
5月15日 12:10 投稿
動的計画法入門:基本概念と実践
動的計画法(DP)は前の状態から次の状態を導き出す手法であり、貪欲法が局所的に最適解を選択するのとは異なります。アルゴリズム学習において、この違いを理解することが重要です。
動的計画法問題を解決するため、以下の5つのステップを確実に理解する必要があります。これら全てをマスターしてこそ、動的計画法を真に理解したと言えます。
DP配列(テーブル)と添字 ...
5月14日 05:35 投稿
可変長スライディングウィンドウの実装パターンと典型問題
スライディングウィンドウの適用条件
スライディングウィンドウは、配列や文字列における連続した部分列に関する問題に有効です。特に、以下のような要件を持つ問題に適しています:
部分配列・部分文字列の最小/最大長を求める
特定の条件を満たす最短/最長の連続要素を探索する
許容誤差(例:最大k個の0を1に変換)付きでの最適解を求める
基本的な実装手順
...
5月13日 15:34 投稿
ハッシュテーブルを活用したアルゴリズム問題の効率的な解法
ハッシュテーブルは、キーと値のペアを格納し、平均的に定数時間O(1)でデータの検索、挿入、削除を行うことができる非常に効率的なデータ構造です。ここでは、ハッシュテーブルの特性を利用して計算量を削減し、アルゴリズムのパフォーマンスを最適化する代表的な問題について解説します。
有効なアナグラムの判定
2つの文字列がアナグラム(文字の並び替え)であるかどう ...
5月11日 10:22 投稿