配列から和がゼロになる3つの要素の組み合わせを求めるアルゴリズム

問題概要 整数配列 numbers が与えられたとき、異なる3つの要素 numbers[i] + numbers[j] + numbers[k] == 0 を満たすすべての一意な三元組 (i, j, k) を見つけて返します。ただし、i, j, k はすべて異なるインデックスを指す必要があります。 制約条件 配列の長さ: 3 ≤ numbers.length ≤ 3000 要素の範囲: -10⁵ ≤ numbers[i] ≤ 10⁵ 実行例 入力: numbers = [-1, 0, 1, ...

8月21日 22:50 投稿

循環リンクリストの検出と入環ノード特定

循環リンクリストの検出 問題概要 リンクリストの先頭ノードheadが与えられたとき、循環構造の有無を判定する。循環構造とは、ノードのnextポインタを追跡することで再訪問可能なノードが存在する状態を指す。循環が存在しない場合はfalseを返す。 入力例 例1: head = [3,2,0,-4], pos=1 → true 例2: head = [1,2], pos=0 → true 例3: head = [1], pos=-1 → false 解法: ...

7月22日 22:34 投稿

小白月赛47 解説と実装

A. ボール詰めゲーム 円柱に詰め込めるボールの体積を求める。円柱の体積は πr²h、各ボールの体積は 4/3 πr³。高さ h の中に収まるボール数は ⌊h/(2r)⌋ 個なので、答えは πr²h − ⌊h/(2r)⌋ · 4/3 πr³ である。計算量は O(1)。 #include <bits/stdc++.h> using namespace std; const double PI = 3.14159265358979323846; int main() { ios::sync_with_stdio(fals ...

7月14日 22:37 投稿

文字列操作:単語の反転と文字列の回転

151. 文字列内の単語を反転する この問題は、これまでに学んだ文字列操作の多くの要素をカバーしています。解法の理解だけでなく、コードの実装も重要です。 主な難点は余分なスペースの削除で、これは双方向ポインタを使用して実現します。具体的には、新しい配列の位置を指すスローポインタがあり、ファストポインタが追加すべき要素を見つけた場合、スローポインタの現 ...

5月24日 08:24 投稿