Javaアルゴリズム実践:コレクション操作とデータ構造

コレクション操作ユーティリティ ArraysとCollectionsクラスの主要メソッド: asList:リスト変換には戻り値が必要 copyOfRange:配列の部分コピー 型変換テクニック // List<Integer> → int[] public int[] convert(List<Integer> list) { return list.stream() .mapToInt(Integer::intValue) .toArray(); } Stream ...

8月10日 13:21 投稿

動的計画法(1)——アルゴリズム入門(16)

動的計画法を学ぶために、まずは2つの問題から始めましょう。 鋼板の切断問題 1.1 問題の提示 ある企業は長さがnの鋼板をいくつかの断片に切り分けて販売したいと考えています。市場では、長さi(0[r_n = \max_{1\leq i\leq n}( p_i + r_{n-i}) ]よって、この問題を解決するには「トップダウン」の再帰的な方法が利用できます。 1.3 トップダウン再帰実装 public static ...

8月9日 20:24 投稿

Javaアルゴリズム問題解法集

1. 文字頻度解析 問題概要 小文字英字のみで構成される単語が与えられます。最も頻繁に出現する文字とその回数を求めてください。複数の文字が同じ回数出現する場合は、辞書順で最小の文字を出力します。 実装例 import java.util.Scanner; public class CharacterFrequency { public static void main(String[] args) { Scanner input = new Scanner(Syste ...

8月9日 12:52 投稿

リンクリストの基本操作:要素削除・設計・反転をC言語で徹底解説

1. 問題203:リンクリストの特定要素削除 // ヘッダノードを使用しない実装(移動操作で削除) struct ListNode* removeElements(struct ListNode* head, int val) { // 先頭ノードが削除対象の場合 while (head != NULL && head->val == val) { head = head->next; } // 先頭以外のノードを削除 struct ListNode* current = head; while ...

8月9日 12:37 投稿

CF996

A link 2つの動物が常に中央に向かってジャンプする場合、中央の間隔が奇数であればもう一方の動物が勝利します(必ず2つの動物が隣り合う状況でアリスがジャンプするから)。偶数の場合、アリスが勝利します(必ず2つの動物が隣り合う状況で相手の動物がジャンプするから)。このように、動物たちは常に中央に向かってジャンプする傾向があります。なぜなら、端に向かって ...

8月9日 10:36 投稿

数字出現回数の統計

ある科学研究の調査で得られた自然数がn個あり、それぞれの数は1500000000(1.5×10⁹)以下である。異なる数の個数は10000個以下である。与えられた自然数それぞれの出現回数をカウントし、自然数の昇順に結果を出力する。 入力形式最初の行には整数nが与えられる。続くn行には自然数が一つずつ書かれている。 出力形式異なる数の個数m行が出力される。各行には自然数とその ...

8月8日 06:20 投稿

行列の対角線上の異なる値の数の差を計算するアルゴリズム

問題概要 m × n のサイズの二次元行列 grid が与えられます。同じサイズの解答行列 answer を作成する必要があります。 行列 answer の各セル (r, c) の値は以下のように計算されます: topLeft[r][c] は行列 grid のセル (r, c) の左上対角線上にある異なる値の数です。 bottomRight[r][c] は行列 grid のセル (r, c) の右下対角線上にある異なる値の数です。 そして an ...

8月8日 01:49 投稿

競技プログラミング問題集の解法解説

問題一覧 A: StringGame (考察) B: SequenceGame (貪欲法+二分探索) C: 猫の世話 (幾何学、考察) D: 数列H (数学) E: キャンディーH (考察) F: エンコーディング1.0 (動的計画法) G: エンコーディング2.0 (深さ優先探索) H: 迷路 (幅優先探索+二点探索) I: レーティング (考察+優先度付きキュー) J: 文字列変換 (総当り) K: 新ゲーム! (計算幾何学+最短経路) A: StringGa ...

8月7日 07:18 投稿

組み込みシステムにおけるC言語のアルゴリズム入門

1. 配列の並び替えアルゴリズム 1.1 選択ソート —— 最小値を特定の位置に配置する 各ステップで未ソート部分から最小値(または最大値)を選び、それを対応する位置と交換することで、全体がソートされるまで処理を繰り返す。昇順での例を示す: #include <stdio.h> int main() { int data[] = {4, 8, 7, 6, 2, 5, 3, 9, 1}; int length = sizeof(data) / s ...

8月6日 20:57 投稿

競技プログラミングにおける構築技法と置換環の実装解説

A. 文字列生成の列挙処理 入力された2文字が同一か否かを判定し、条件を満たす文字列候補を列挙する。同一文字の場合は長さ1と2の2通り、異なる文字の場合は単体および結合形の計4通りを出力すればよい。 def solve_string_gen(): c1, c2 = input().split() if c1 == c2: print(2) print(c1) print(c1 * 2) else: print(4) ...

8月6日 05:07 投稿