Union-Findアルゴリズムによるグラフの連結成分とその応用
無向グラフにおける連結成分の数え上げ
この問題では、与えられた無向グラフに含まれる連結成分の総数を求める必要があります。Union-Find(素集合データ構造)を用いることで効率的に解決できます。各ノードを初期状態で自身を親とする木として扱い、エッジを通じてノードを結合していきます。パス圧縮により探索効率を高め、最終的なルートノードの数が答えとなります。
...
7月16日 16:06 投稿
Pythonによるアルゴリズム実装入門
基礎構文とデータ構造
1. 変数と基本操作
Two Sum(二数の和)
# アプローチ1:全探索
class Solution:
def twoSum(self, nums, target):
for i in range(len(nums)):
for j in range(i + 1, len(nums)):
if nums[i] + nums[j] == target:
return [i, j]
# アプローチ2:ハッシュマップ
class Solution: ...
7月13日 00:57 投稿
LeetCodeにおける動的計画法:最長増加部分列と最長重複部分配列の解説
最長増加部分列 (LeetCode 300)
整数配列が与えられた場合、その中に含まれる最長の狭義増加部分列(Strictly Increasing Subsequence)の長さを見つけます。部分列とは、配列から要素をいくつか(0個でもよい)削除し、残りの要素の順序を変更しないで得られる配列のことを指します。
この問題は動的計画法(DP)を用いて解くのが一般的です。2層のループ構造が必要と ...
7月11日 22:38 投稿
Go言語で90%のリンクリスト問題を解決する3つのテクニック:LeetCode-Goでの逆転、環検出、およびマージ
Go言語で90%のリンクリスト問題を解決する3つのテクニック
この記事では、LeetCode-Go を使用して、リンクリストの逆転、環検出、およびマージを行う方法について説明します。これらのテクニックは、インタビューとアルゴリズムの練習で役立つでしょう。
### LeetCode-Goの特徴
LeetCode-Goは、Go言語で書かれたLeetCodeの問題解法集です。全ての問題が100%のテストカ ...
7月11日 21:05 投稿
LeetCodeの連結リスト問題解法:ノード交換、削除、交差検出、循環検出
ノードのペア交換(問題24)
連結リストの隣接ノードを交換する実装例。ダミーノードを使用し、3つのポインタで前後関係を管理します。
class Solution {
public:
ListNode* swapNodePairs(ListNode* head) {
ListNode dummy(0);
dummy.next = head;
ListNode* current = &dummy;
while (current->next && current->next-> ...
7月10日 22:22 投稿
doocs/leetcode リポジトリへのコントリビュート手順:アルゴリズム解法をオープンソースで共有する
doocs/leetcode は、LeetCode や『世界で闘うプログラミング・インタービュー(原題: Cracking the Coding Interview)』などのアルゴリズム問題に対し、多様なプログラミング言語での解法を提供することを目的としたオープンソースプロジェクトです。このプロジェクトへの貢献は、自身のアルゴリズムスキルの向上だけでなく、コードレビューを通じた技術力の研鑽や、世界 ...
7月10日 17:03 投稿
電話番号からアルファベット組み合わせを生成するアルゴリズム
問題概要:
数字文字列(2〜9のみ)を入力として、該当するすべてのアルファベット組み合わせを返す。結果は任意の順序で出力可能。
電話ボタンの数字とアルファベットの対応関係は以下の通り(1は対応なし):
2 -> "abc"
3 -> "def"
4 -> "ghi"
5 -> "jkl"
6 -> "mno"
7 -> "pqrs"
8 -&g ...
7月8日 21:49 投稿
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 投稿