PHPで実装するキューとスタック:配列と連結リストによるデータ構造の基礎
キュー(Queue)の基本概念
キューは先入先出(FIFO: First In, First Out)の原則に従う線形データ構造です。データの追加(エンキュー)は末尾でのみ行われ、データの削除(デキュー)は先頭でのみ行われます。PHPの組み込み関数を使用する場合、array_push() または配列の代入で末尾に要素を追加し、array_shift() で先頭の要素を削除することでキューの動作を再現でき ...
9月14日 11:19 投稿
11月15日のアルゴリズム問題集追加
11/15
問題1: 二進数行列の最小反転回数 (3239)
解法はシミュレーションに基づく。
各行の反転回数を計算し、列方向の反転回数も同様に求めます。
int calcRowDiff(const vector& matrix) {
int count = 0;
for (const auto& row : matrix) {
for (size_t i = 0; i < row.size() / 2; ++i) {
if (row[i] != row[row.size()-1-i]) ++count;
...
9月9日 19:42 投稿
基本的なアルゴリズム:離散化
離散化
#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 1000010;
int n, m;
vector<int> originalValues;
vector<int> addedValues;
vector<int> startPos, endPos;
vector<long long> diffArray;
bool canProcess(int limit)
{
fill(diffArray.begin(), diffArray.end(), 0);
for (int i = 0; i < li ...
8月29日 17:04 投稿
配列によるスタックのC++実装 —— 作成・プッシュ・ポップ・トップ・クリア処理
本日は配列を用いたスタックのC++実装について学習しました。これはポインタ方式と多くの点で異なります。
ポインタ方式では、スタックの初期化時にヘッドノードを確保し、プッシュ操作では新しいノードを割り当て、ポップ操作ではノードを解放します。これらのノードはすべて最初の位置に配置され、トップ要素を取得する際にはS->next->dataを参照します。
一方で配 ...
8月29日 02:20 投稿
単方向連結リストの基礎とJavaによる実装
連結リストとは
連結リストは、配列とは異なり連続したメモリ領域を必要としないデータ構造です。各ノードが次のノードへの参照(ポインタ)を持つことで、離散的なメモリブロックを連結します。
この特性により、要素の検索は先頭から順次走査する必要がありますが、挿入や削除は参照の付け替えだけで完結します。その結果、配列と比較して検索のコストが高く、挿入・削 ...
8月26日 21:39 投稿
キー・バリューストアとハッシュテーブルの実装
マップ(連想配列)では、キーと値のペアでデータを管理する。キーを一意に識別するために、文字列変換関数を用いることが多い。以下は、シンプルな辞書(Dictionary)クラスの実装例である。
// オブジェクトのキーを文字列に変換する補助関数
function keyToString(item) {
if (item === null) return "NULL";
if (item === undefined) return "UNDEFINED";
if (t ...
8月20日 01:58 投稿
Javaにおける配列の基本操作とメモリ管理
配列の概念と特性
配列(Array)は、同一データ型の複数の値を格納するためのコンテナです。データ格納時には暗黙的な型変換を考慮する必要があります。
配列の宣言方法
形式1:データ型[] 配列名
int[] numbers;
形式2:データ型 配列名[]
int numbers[];
静的初期化
int[] numbers = new int[]{10, 20, 30, 40};
// 簡略化形式
int[] values = {15, 25, 35, 45};
動的 ...
8月17日 11:15 投稿
Pythonの集合操作と重複排除テクニック
集合の基本操作
Pythonの集合は数学的な集合演算をサポートしています。以下は主要な集合操作の例です。
集合演算の実例
set_a = {'食事', '睡眠'}
set_b = {'食事', '睡眠', '旅行', 'ゲーム', '読書', '運動'}
# 共通部分(積集合)
intersection = set_a & set_b
print(f"共通要素: {intersection}")
# 和集合
union = set_a | set_b
print(f"全要素: {union}")
# ...
8月11日 23:19 投稿
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 投稿
Javaアルゴリズム問題解法集
1. 文字頻度解析
問題概要
小文字英字のみで構成される単語が与えられます。最も頻繁に出現する文字とその回数を求めてください。複数の文字が同じ回数出現する場合は、辞書順で最小の文字を出力します。
実装例
import java.util.Scanner;
public class CharacterFrequency {
public static void main(String[] args) {
Scanner input = new Scanner(Syste ...
8月9日 12:52 投稿