11月15日のアルゴリズム問題集追加

11/15 問題1: 二進数行列の最小反転回数 (3239) 解法はシミュレーションに基づく。 各行の反転回数を計算し、列方向の反転回数も同様に求めます。 int calcRowDiff(const vector& matrix) { int count = 0; for (const auto& row : matrix) { for (size_t i = 0; i < row.size() / 2; ++i) { if (row[i] != row[row.size()-1-i]) ++count; ...

9月9日 19:42 投稿

キー・バリューストアとハッシュテーブルの実装

マップ(連想配列)では、キーと値のペアでデータを管理する。キーを一意に識別するために、文字列変換関数を用いることが多い。以下は、シンプルな辞書(Dictionary)クラスの実装例である。 // オブジェクトのキーを文字列に変換する補助関数 function keyToString(item) { if (item === null) return "NULL"; if (item === undefined) return "UNDEFINED"; if (t ...

8月20日 01:58 投稿

データ構造とアルゴリズムの実践:ユニオンファインドと二分木操作

本記事では、特定のアルゴリズム問題に対するアプローチと実装について考察します。ユニオンファインド、ハッシュテーブル、そして二分木のさまざまな操作(巡回、比較、対称性チェック、パス計算)に焦点を当てます。 アカウントのマージ問題 複数のメールアドレスが同一人物に属するかを判断し、関連するすべてのアドレスを統合する問題について考えます。これは、互い ...

8月16日 21:57 投稿

探索アルゴリズムと分散データ構造の実装指南

二分探索法の基本ロジック 要素が昇順に整列された配列に対し、目的のキーが含まれるインデックスを対数時間で特定する関数です。境界値の更新順序と終了条件の設計が正しさの鍵となります。 参考実行枠組み #include <stdio.h> #include <stdlib.h> #define MAX_CAPACITY 10 #define SEARCH_FAILED 0 typedef int ValueT; typedef int IndexT; typedef st ...

8月2日 14:32 投稿

フラッドフィルアルゴリズムによる領域の囲い込みと最長連続シーケンス探索

問題1: フラッドフィルを用いた領域の囲い込み 二次元グリッドが与えられ、各セルは'X'または'O'で構成されます。境界に接続されていない'O'の領域を特定し、それらを'X'に変換する必要があります。境界に隣接する'O'は変換せずに保持します。 アプローチ: 深さ優先探索(DFS)を活用し、境界上の'O'から接続された領域を一時マークで識別します。その後、マークされていない ...

7月28日 16:43 投稿

データ構造とアルゴリズム - ハッシュテーブル

1. ハッシュテーブルの基本概念 順序リストや木構造では、データ要素を検索する際にキーの比較を繰り返す必要があります。比較回数を減らすためには、データ要素の格納位置とキーの値の間に関連性を確立する必要があります。この目的のために、ハッシュ技術を用いた動的検索表が使用されます。まず、いくつかの基本概念を理解しましょう。 ハッシュ関数:データ要素のキー ...

7月8日 23:35 投稿

C++プログラミングの重要な注意点とベストプラクティス

1. イテレータとペアの値へのアクセス方法の違い イテレータを介して値にアクセスする場合と、ループ内で直接ペアオブジェクトにアクセスする場合で、ドット演算子とアロー演算子の使い分けが必要です。 class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { std::unordered_map hash_map; for(int i = 0; i < ...

5月16日 00:32 投稿