從陣列隨機抽取不重複元素:兩種演算法對比分析
從無重複陣列中隨機抽取指定數量的不重複元素,核心挑戰在於避免重複抽取(特別是接近尾聲時),需盡可能降低碰撞機率。本文分析兩種不同策略的實作與效能差異。 演算法
C++ Primer 書店程式:Sales_data 類完整實作詳解
《C++ Primer》經典書店程式範例,展示 Sales_data 類的完整設計,涵蓋建構函數、運算子多載、友元函數、IO 操作等核心 C++ 特性。 類別
LintCode 字串查找:實現 strStr 函數完整解析
字串查找(又稱子字串搜尋)是字串操作中極為實用的功能。任務要求在來源字串 source 中找出目標字串 target 首次出現的起始索引(從 0 開始計算),若
Codeforces Round 311 Div2 題解 A B C 三題經驗分享
比賽心得 手速。比賽中不看排名,專注解題。 Problem A: Ilya and Diplomas 分配三類獎狀,每類有最小/最大限制。優先最大化第一類,
LeetCode Palindrome Number 回文數判斷 數學反轉
問題 判斷整數是否為回文數。負數非回文,不使用額外空間(即不轉字符串)。 方法一:逐位比較(無溢出風險) 計算位數 len 對 i=0..len/2-1,比
Codeforces 86D Powerful Array 莫隊算法 區間頻次平方和
問題 數組長度 n≤200,000,查詢 Q≤200,000。每查詢 [l,r] 求 Σ cnt[x]² * x,其中 cnt[x] 為 x 在區間內出現次數。
LeetCode Single Number 只出現一次的數字 異或運算
問題 數組中除一個數出現一次外,其餘均出現兩次。找出該數。要求 O(n) 時間,O(1) 空間。 異或運算性質 x ^ x = 0 x ^ 0 = x 交換
Codeforces Round 311 Div2 E Ann and Half 回文串 + 字典樹 + DP
問題 給定字符串 s (|s|≤5000),定義「半回文」:對所有奇數位置 i,s[i] == s[n-i+1]。求所有半回文子串按字典序第 k 個。 兩階段
SpringMVC + Spring + MyBatis 整合 SSM 框架搭建完整教程
項目結構 src/main/java ├── com.example.ssm │ ├── config │ │ ├── mybatis │ │
線段樹講解 數據結構 C++ 實現 区間查詢與單點更新
線段樹定義 二叉樹結構,每個節點對應一個區間 [l,r],存儲該區間的聚合信息(和、最大值、最小值等)。根節點對應 [1,n],葉節點對應單個元素。 核心操作
POJ 2955 Brackets 區間 DP 括號匹配最大長度
問題 給定括號序列(長度 ≤100),只含 ()[]。求最長合法子序列長度。合法定義:空串、包裹合法串、合法串拼接。 區間 DP 狀態與轉移 dp[i][j]
LintCode Ugly Number 第 K 個醜數 優先隊列與 DP
問題 醜數定義:質因子只包含 3, 5, 7。求第 K 個醜數。序列:3, 5, 7, 9, 15, 21, 25, 27... 方法一:最小堆 + 去重集合
HDU 4630 No Pain No Game 線段樹 區間最大 GCD
問題 1..n 的排列,Q 次查詢 [l,r],求區間內任意兩個不同數的最大 GCD。n,Q ≤ 50,000。 關鍵洞察:因數視角 兩數 GCD ≥ d ⇔
Codeforces 238E Meeting Her 圖論 + 記憶化搜索 最壞情況換乘
問題大意 有向圖 n≤100,k≤100 條公交線路。第 i 路線從 s_i 到 t_i,每秒隨機選一條最短路徑行駛。Urpal 從 a 到 b,可在任意交叉點
工廠方法模式 Factory Method Pattern C++ 實現
模式定義 定義一個創建對象的接口,讓子類決定實例化哪個類。工廠方法將實例化推遲到子類。 適用場景 類不知道它必須創建的對象的類 類希望由子類指定創建的對
二維數組按指定列排序 穩定排序鏈式比較
問題 m×n 整數矩陣,按第 i 列(1-based)為主鍵排序。若相等則按 i+1 列、i+2 列...遞歸比較,直到最後一列。完全相等保持原序(穩定排序)。