二分木問題の解法と実装

二分木の基礎理論 二分木は各ノードの子ノード数が最大2の木構造です。主要な形態として完全二分木と完全二分木が存在します。データ格納方式には配列を用いた順序格納とポインタを用いたリンク方式があります。走査方法は以下の通りです: 先行走査(深さ優先) 中間走査(深さ優先) 後行走査(深さ優先) 階層走査(幅優先) class BinaryNode: def __init__(self ...

5月28日 10:53 投稿

ベクトル演算を用いた正方形判定アルゴリズム

問題概要 LeetCodeの問題593では、2次元平面上の4点の座標が与えられ、それらが正方形を形成するかどうかを判定する必要がある。入力される点の順序は任意である。 解法の考え方 ベクトル演算を利用することで効率的に解決できる。基準点を1つ選び、他の3点へのベクトルを計算する。これらのベクトルを長さの昇順に並べ替え、\(\boldsymbol{v}_0, \boldsymbol{v}_1, \bolds ...

5月28日 04:16 投稿

ビット演算の核心技術:基礎から実践まで(C++による実装)

アルゴリズムの効率性を最大化するためのビット演算の体系的な解説。状態圧縮やマスク操作、空間複雑度O(1)の最適化手法を、大手企業の実際問題を通じて学習します。 一、ビット演算子の基本操作 演算名 記号 動作 応用例 論理積 & 共に1のときのみ1 フラグの抽出 論理和 | いずれか1なら1 設定値の統合 排他的論理和 ^ 異なるビットが1 重複値の除去 ...

5月27日 11:03 投稿

文字列操作の高度なテクニック:StringBuilder APIと回転アルゴリズム

StringBuilder APIの基本操作 主要なStringBuilderメソッド append(String str):文字列を末尾に追加します。 insert(int offset, String str):指定位置に文字列を挿入します。 delete(int start, int end):指定範囲の文字を削除します。 deleteCharAt(int index):指定位置の文字を削除します。 reverse():文字列を反転します。 toString():StringBuilderをStringに ...

5月27日 02:03 投稿

単調スタックの活用術と代表的なアルゴリズム問題

単調スタックの基本概念 単調スタック(Monotonic Stack)は、スタック内の要素が常に単調増加、または単調減少の順序を保つように維持するデータ構造です。この特性を利用することで、配列内の各要素に対して「左側または右側で最も近い、より大きい(または小さい)要素」を効率的に探索することができます。 典型的な応用としては、以下の 4 つのパターンがあります。 ...

5月25日 20:41 投稿

LeetCode 203: リンクリストから指定された値を持つノードを削除する

問題 この問題では、リンクリストの先頭ノード head と整数 val が与えられます。リンクリストから Node.val == val を満たす全てのノードを削除し、新しい先頭ノードを返します。 例1: 入力: head = [1,2,6,3,4,5,6], val = 6 出力: [1,2,3,4,5] 例2: 入力: head = [], val = 1 出力: [] 例3: 入力: head = [7,7,7,7], val = 7 出力: [] 制約: リスト内の ...

5月23日 02:08 投稿

文字列の回転・k個のソート済みリストのマージ・スキー問題の解法

109: 文字列の回転 問題リンク: 文字列回転問題 解法: class StringRotator { public: bool checkRotation(string str1, string str2) { int len = str1.length(); if (len != str2.length()) return false; for (int i = 0; i < len; i++) { if (str1[i] == str2[0]) { int idx1 = i, idx2 = 0; ...

5月22日 17:57 投稿

LeetCode 49題 - 文字列のアナグラムグループ化(Java実装)

文字列49 49. 文字列のアナグラムグループ化 問題記述 文字列の配列が与えられるので、アナグラムを同じグループにまとめなさい。結果のリストは任意の順序で返して構いません。 アナグラムとは、元の単語のすべての文字を並び替えて作られる新しい単語のことです。 例1: 入力: strs = ["eat", "tea", "tan", "ate", "nat&qu ...

5月21日 04:03 投稿

ハッシュテーブルの実装とアルゴリズム応用:基礎から競技プログラミング問題への適用まで

ハッシュテーブルの仕組みと実装 基本構造の構築 ハッシュ値の生成手法は一旦置き、ハッシュ値が外部から与えられる前提でハッシュテーブルの骨組みを実装する。内部では配列と連結リストを用いてキーと値のペアを管理する。 public class CustomHashMap { static class Node { int code; Object key; Object val; Node next; ...

5月20日 12:47 投稿

挿入ソートの原理と実装

挿入ソート(Insertion Sort)は、配列を部分的に整列させながら全体をソートしていくアルゴリズムである。既に整列された部分に対して、次の要素を適切な位置に挿入することで、徐々に整列範囲を広げていく。 アルゴリズムの流れ 最初の要素を「整列済み」とみなす。 次の要素を取り出し、整列済み部分の末尾から先頭に向かって比較を行う。 取り出した要素が比較 ...

5月19日 20:41 投稿