リンクリストの要素削除、設計、および逆転

Leetcode - 203 リンクリストの要素削除 この問題のシンプルな解決法は、削除する要素の位置を判断し、2つの場合を分けることです。削除する要素が先頭であるか、そうでないかです。先頭削除の場合は、一時的なポインタを作成し、頭のポインタを更新します。非先頭削除の場合は、前後の要素を連結します。 /** * Definition for singly-linked list. * struct ListNode { ...

5月19日 19:51 投稿

スタックとキューの実装:データ構造の変換問題

基礎知識 スタックとキューの内部実装メカニズム キューは先入れ先出し(FIFO)、スタックは後入れ先出し(LIFO)です。 スタックに関する4つの基本質問 C++におけるstackはコンテナですか? スタックとキューはSTL(C++標準ライブラリ)の2つのデータ構造です。STLでは、スタックはコンテナとして分類されるのではなく、container adapter(コンテナアダプタ) ...

5月19日 11:09 投稿

二分木の基本問題と解法

一、100. 同じ木の判定 1. 問題概要 二つの二分木の根ノード p と q が与えられたとき、これらの木が同じであるかどうかを検証する関数を記述してください。 2つの木が構造的に同じで、かつノードの値が同じである場合、それらは同じであると見なされます。 2. コード class BinaryTreeChecker { public boolean areTreesIdentical(TreeNode node1, TreeNode node2) ...

5月19日 10:29 投稿

トライ木:効率的な文字列検索と接頭辞マッチングのためのデータ構造

トライ木(Trie)は、辞書木や接頭辞木とも呼ばれるデータ構造で、特定の文字列が存在するかどうかの検索や、特定の接頭辞を持つ文字列の数を効率的に数えるために使用されます。 トライ木は接頭辞の概念を利用しており、各文字列を一文字ずつ分解して木構造のノードに格納します。例えば、"cup", "apple", "cake", "app", "blog" という単語がある場合、以下のような木構 ...

5月19日 06:24 投稿

Redis 5.0.7ソースコード解析:双方向リンクリスト

Redisにおける双方向リンクリストの実装は、adlist.hとadlist.cというファイルに記述されています。 一、データ構造 Redisで実装されている双方向リンクリストは、一般的な双方向リンクリストと基本的に同じ構造を持っています。 単一ノード: 1 typedef struct listNode { 2 struct listNode *prev; 3 struct listNode *next; 4 void *value; 5 } listNode; ...

5月19日 05:24 投稿

競技プログラミング問題解説:5つのアルゴリズム問題の実装例

P1628 合并序列 - 文字列のマージ 指定されたプレフィックスで始まるすべての文字列をマルチセットに格納し(重複を許可し、自動的にソートされる)、出力します。 #include <iostream> #include <vector> #include <string> #include <set> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); in ...

5月18日 16:12 投稿

差分配列と累積和のアルゴリズム

差分配列と累積和 テンプレート(疑似コード) // 元データの読み込み: n, m, a n, m = 入力() for i = 0 to n-1: a[i] = 入力() // 元の配列 // 差分配列の構築 for i = 0 to n-1: diff[i] = a[i] - a[i-1] // 区間操作 while m > 0: m = m - 1 l, r, value = 入力() diff[l] = diff[l] + value diff[r+1] = diff[r+1] - value // 累積和で ...

5月18日 12:33 投稿

二分探索木(BST)

① なぜ二分探索木が必要なのか? ソートされた配列で要素を検索する場合、二分探索を使用すると、複雑度は O(log n) になります。 しかし、その中に要素を挿入または削除する場合、複雑度は O(n) になります。 この問題に対する解決策として、二分探索木が存在します。 ② 二分探索木とは何か? まず、二分探索木の目的を明確にします:検索、挿入、削除の操作を O(log n) ...

5月18日 08:53 投稿

Codeforces Round #627 解法解説

A - Yet Another Tetris Problem n個の整数a_iが与えられます。各操作では、任意のiについてa_iを2増やすか、すべてのa_iを1減らすことができます。すべての値を0にできるか判定してください。 解法:すべての値の偶奇が一致する場合のみ可能です。 #include <iostream> using namespace std; void solve() { int n, first, val; cin >> n >> first; fi ...

5月17日 19:21 投稿

Redissonを用いたSpring Bootアプリケーションの開発ガイド

Spring BootアプリケーションにRedissonを統合することで、分布型データ構造やサービスを容易に利用できます。以下の手順は、依存関係の追加、設定、主要なデータ型の操作、分布型ロックの使用を網羅しています。 1. 依存関係の追加 Spring Bootプロジェクトの`pom.xml`ファイルにRedissonの依存を追加します。最新バージョンを使用することで、最新機能とセキュリティ修 ...

5月17日 04:24 投稿