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

Codeforces ラウンド 970 (Div. 3)

A. サクラコの試験 解法 全探索で解く。 コード #include <iostream> using namespace std; void solve() { int a, b; cin >> a >> b; for (int i = 0; i n; string s; cin >> s; int m = sqrt(n); if (m * m != n) { cout a >> b; long long l = 1, r = 2e9, ans = 0; while (l

5月22日 19:19 投稿

文字列の回転・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 投稿

AtCoder Beginner Contest 310 各問題のアルゴリズム解説とC++実装例

A: 別の注文方法 料理とセットで購入する場合、特定のドリンクが定価 \(P\) から割引価格 \(Q\) へ変更される。セット購入しない場合は、別のドリンクリストから任意の価格のものを選ぶことができる。支払い額を最小化する問題である。 実装方針は単純である。セット割引適用時の支払い額 \(Q + \min(A)\) と、割引なしの定価 \(P\) を比較し、小さい方を出力すればよい。\ ...

5月22日 01:48 投稿

『データ構造』課程設計(C/C++版):植物百科データの管理と分析

目次 第1関:植物情報の追加 第2関:植物情報の削除 第3関:植物情報の変更 第4関:順序表に基づく順次探索 第5関:連結リストに基づく順次探索 第6関:順序表に基づく二分探索 第7関:二分探索木に基づく探索 第8関:オープンアドレス法に基づく ...

5月21日 18:00 投稿

プレフィックス和と差分アルゴリズムの理解とC++実装

プレフィックス和アルゴリズム 基本概念 プレフィックス和は配列処理技術の一種で、事前計算により部分区間の和をO(1)で取得可能にします。入力配列をdataとすると、プレフィックス配列prefは次のように定義されます: pref[i] = data[0] + data[1] + ... + data[i] pref[0] = data[0] 構築方法 C++による実装例: vector<int> constructPrefixArray(const vector& ...

5月21日 01:20 投稿

C++ 設計パターン:Factory パターンの基礎と応用

Factory パターンは、オブジェクトのインスタンス化プロセスをカプセル化する創造型デザインパターンの代表的な手法です。これにより、クライアントコードと具体的なクラスの実装間の結合度を低下させ、システムの保守性や拡張性を向上させることが可能です。 簡易工場パターン (Simple Factory) このアプローチでは、特定のパラメータに基づいて製品クラスのインスタンス ...

5月20日 17:56 投稿

リンクリスト操作の実践:ノード交換、削除、交点検出、循環検出

リンクリストのノード交換 反復解法 ListNode* swapPairs(ListNode* head) { if(!head || !head->next) return head; ListNode dummy(0); dummy.next = head; ListNode* prev = &dummy; ListNode* curr = head; while(curr && curr->next) { ListNode* nextNode = curr->next; // ノード交換 prev->n ...

5月20日 14:29 投稿

C++開発職向け2024年新卒筆記試験問題と解説

一、単一選択問題 1-1 配列 int a[2][3]; が宣言されているとき、a の要素への正しいアクセス方法は? A. a[0][1+1] B. a[1][3] C. a[1,3] D. a(1)(1) 1-2 関数オーバーロードに関する正しい記述は? A. オーバーロード関数の名前は異なってもよい B. 引数の個数が必ず異なる必要がある C. 戻り値の型が異なっていなければならない D. 引数リストが異 ...

5月20日 11:12 投稿

KMPアルゴリズムによる高速文字列検索

文字列検索問題は、与えられたテキスト文字列 S の中にパターン文字列 P が出現する位置をすべて求める課題である。ナイーブな実装では、各位置から一致を確認し、最悪計算量は O(|S| \cdot |P|) となる。 これを効率化するために、KMP(Knuth-Morris-Pratt)アルゴリズムが用いられる。このアルゴリズムは、マッチング失敗時に無駄な比較を省略することで、線形時間 O(|S ...

5月20日 08:15 投稿