面試題 13:查找鏈表中倒數第 k 個節點
給定一個單向鏈表,求倒數第 k 個節點。要求只能遍歷一次鏈表。 雙指針法(快慢指針) 定義兩個指針 pFast 和 pSlow,初始都指向頭節點。先讓 pFas
調整數組順序使奇數位於偶數前:雙指針分區 O(n) 原地算法
題目 輸入整數數組,調整順序使所有奇數位於偶數前面。要求原地修改、O(n) 時間、O(1) 空間。奇數/偶數內部相對順序無要求(若要求穩定需額外空間)。 雙指
面試題 11:O(1) 時間刪除鏈表節點
在單向鏈表中,常規刪除節點需要從頭遍歷找到前驅節點,時間複雜度為 O(n)。但若已知要刪除的節點指針,可通過「值覆蓋法」在 O(1) 時間內完成刪除(大多數情況
面試題 10:計算二進制中 1 的個數
給定一個整數,求其二進制表示中 1 的個數。這是一道常見的位運算面試題,主要考察對位運算特性的掌握。本文介紹三種解法,並分析其優缺點。 方法一:右移計數法 思路
斐波那契數列:遞歸、迭代、矩陣快速冪、通項公式四種實現與性能對比
定義 F(0)=0, F(1)=1, F(n)=F(n-1)+F(n-2) (n≥2)。 四種實現方式 1. 遞歸(指數級,教學用) long long f
旋轉數組最小值查找:二分法 O(log n) 完整解析與邊界處理
題目 給定一個非遞減排序數組旋轉後得到的數組(如 [3,4,5,1,2]),查找其中的最小元素。數組可能包含重複值。要求 O(log n) 時間。 旋轉數組性
用兩個隊列實現棧:入棧 O(1)、出棧 O(n) 完整模板與兩種策略對比
題目 僅使用兩個隊列(queue<T> 或 deque<T>)實現棧接口:push()、pop()、top()、empty()。 核心
POJ 3276 Face The Right Way:翻轉牛朝向,滑動窗口 + 貪心枚舉 K 求最小操作數
題目大意 N 條牛(1 ≤ N ≤ 5000)排成一行,朝向 F(前)或 B(後)。有一台機器,固定參數 K(1 ≤ K ≤ N),每次操作翻轉連續 K 條牛的
HDU 2083 簡易版最短距離:選擇中位數作為出發點最小化曼哈頓距離和
題目大意 N 個朋友住在 X 軸上(坐標 x_i)。ACBOY 選一個朋友家作為基地,每次拜訪一個朋友後必須返回基地。總路程 = Σ |x_i - base|。
POJ 1611 The Suspects:並查集經典應用,SARS 接觸者追蹤
題目背景 學生分組,同組視為密切接觸。已知 0 號學生為疑似病例,求所有疑似學生總數。輸入多組測試,每組 n(學生數 ≤ 30000)、m(組數 ≤ 500),
HDU 1029 時鐘問題:計算時針分針夾角、排序求中位數時間
題目大意 給定 5 個時間(格式 hh:mm,24 小制),計算每個時間的時針與分針最小夾角(0°~180°)。按夾角非遞減排序,夾角相同時按時間早晚排序。輸出
用兩個棧實現隊列:入隊 O(1)、出隊攤還 O(1) 完整模板實現
題目 僅使用兩個棧(stack<T>)實現隊列接口:push_back()(入隊)、pop_front()(出隊)、front()、empty()、
面試題 5:從前序與中序遍歷序列重建二叉樹
在面試中,重建二叉樹是一道經典的算法題。給定一棵二叉樹的前序遍歷序列和中序遍歷序列,我們可以唯一確定這棵二叉樹的結構,並將其重建出來。 核心思路 前序遍歷的順序
從尾到頭打印鏈表:棧與遞歸兩種實現及優劣分析
題目 給定單鏈表頭指針,從尾到頭打印每個節點的值。不能修改鏈表結構。 方法一:顯式棧(推薦) 思路:順序遍歷鏈表,將節點指針壓入 std::stack;遍歷結
字符串空格處理三部曲:替換、刪除、合並多餘空格 O(n) 原地算法
問題背景 字符串空格處理是面試高頻題,核心要求:原地修改(不分配新數組)、時間 O(n)、空間 O(1)。本文系統講解三種場景: 替換空格為 %20(URL