ハッシュテーブルの実装とアルゴリズム応用:基礎から競技プログラミング問題への適用まで
ハッシュテーブルの仕組みと実装
基本構造の構築
ハッシュ値の生成手法は一旦置き、ハッシュ値が外部から与えられる前提でハッシュテーブルの骨組みを実装する。内部では配列と連結リストを用いてキーと値のペアを管理する。
public class CustomHashMap {
static class Node {
int code;
Object key;
Object val;
Node next;
...
5月20日 12:47 投稿
挿入ソートの原理と実装
挿入ソート(Insertion Sort)は、配列を部分的に整列させながら全体をソートしていくアルゴリズムである。既に整列された部分に対して、次の要素を適切な位置に挿入することで、徐々に整列範囲を広げていく。
アルゴリズムの流れ
最初の要素を「整列済み」とみなす。
次の要素を取り出し、整列済み部分の末尾から先頭に向かって比較を行う。
取り出した要素が比較 ...
5月19日 20:41 投稿
LeetCode 2960: テスト済みデバイスのカウント問題
長さn、0から始まるインデックスを持つ整数配列batteryPercentagesが与えられ、これはn個のデバイスのバッテリー百分比を表します。
あなたのタスクは、各デバイスiを順番にテストし、以下のテスト操作を実行することです:
もしbatteryPercentages[i]が0より大きい場合:
テスト済みデバイスのカウントを増やす。
インデックスが[i + 1, n - 1]のすべてのデバイスのバッテ ...
5月19日 14:13 投稿
LeetCode解説:216.組合せ総和IIIと17.電話番号の文字列組み合わせ [バックトラッキング編]
LeetCode 216.組合せ総和III
問題リンク:216.組合せ総和III
問題説明
1から9までの数字からk個の数字を選び、その合計がnとなるすべての有効な組み合わせを見つけます。以下の条件を満たす必要があります:
使用できる数字は1から9まで
各数字は最大で1回まで使用可能
結果には重複する組み合わせを含めない
例1:
入力:k = 3, n = 7
出力: [[1,2,4]]
説明: 1 + 2 + ...
5月18日 15:03 投稿
循環配列における次の大きな要素の検出と「雨水を貯める」問題のアルゴリズム解説
503. 循環配列における次の大きな要素 II (Next Greater Element II)
循環配列(最後の要素の次が最初の要素となる配列)が与えられた場合、各要素に対して「次に大きい要素」を見つける問題です。要素xの次に大きい要素とは、配列を巡回順で走査した際、xの後に現れる最初のxより大きな数値を指します。そのような数値が存在しない場合は-1を出力します。
解法アプロー ...
5月16日 17:53 投稿
滑動窓最大値と上位K頻度要素のアルゴリズム実装
LeetCode 239. スライディングウィンドウ最大値
問題リンク:239. スライディングウィンドウ最大値 - LeetCode
アプローチ:
ウィンドウの左端が常に最大値となるように維持し、popleft操作で自動的に最大値を取得できるようにする。
# Pythonで双端キューを使用した実装
class Solution:
def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
...
5月16日 02:53 投稿
【データ構造とアルゴリズム】(24)高度なデータ構造とアルゴリズム設計:二つのポインタを用いた問題の解法と実装例
4.6 Leetcodeにおける二つのポインタ手法
以下の問題はすべて二つのポインタを用いるものであり、加えて以下のケースも含まれる:
Leetcode3: 最長の重複しない部分文字列(ハッシュテーブルの章で扱った)
ホーソーのクイックソート
二分探索
など
ゼロの移動 - Leetcode 283
public class ZeroMoveLeetcode283 {
static void moveZeros(int[] nums) {
int ...
5月15日 22:47 投稿
動的計画法による部分列問題の解法
問題1:最長増加部分列
最長増加部分列(Longest Increasing Subsequence, LIS)問題は、与えられた数列から、要素が厳密に増加する順序で並んでいる最長の部分列を見つける問題です。
class Solution {
public:
int lengthOfLIS(vector<int>& arr) {
// 1. DPテーブルの作成
int size = arr.size();
vector<int> dp(size, 1) ...
5月15日 12:10 投稿
動的計画法入門:基本概念と実践
動的計画法(DP)は前の状態から次の状態を導き出す手法であり、貪欲法が局所的に最適解を選択するのとは異なります。アルゴリズム学習において、この違いを理解することが重要です。
動的計画法問題を解決するため、以下の5つのステップを確実に理解する必要があります。これら全てをマスターしてこそ、動的計画法を真に理解したと言えます。
DP配列(テーブル)と添字 ...
5月14日 05:35 投稿