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 投稿