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