原创 【數據結構與算法】位運算經典題

位運算原理 位運算原理 基本位運算 x ^ 0s = x x & 0s = 0 x | 0s = x x ^ 1s = ~x x & 1s = x x | 1s = 1s x ^ x = 0

原创 【數據結構與算法】字符串經典題

1. 翻轉移位相關方法 2. 有效的字母異位詞 翻轉移位相關方法 右移 s = "abcd123" k = 3 Return "123abcd" 先分別將“abcd”和“123”翻轉,再將整個字符串翻轉,即可得到結果。 單詞翻轉 s

原创 【數據結構與算法】隊列與棧經典題總結

1. 用隊列實現棧 2. 最小棧 3. 有效的括號 4. 每日溫度(棧應用) 5. 下一個更大元素2(棧應用) 用隊列實現棧 LeetCode:用隊列實現棧 題目描述: 使用隊列實現棧的下列操作: push(x) -- 元素 x 入棧

原创 UNIX五種I/O模型

UNIX的五種I/O模型:阻塞式I/O模型,非阻塞式I/O模型,I/O複用模型,信號驅動式I/O模型,異步I/O模型。這些概念看似容易混淆,從UNIX底層的I/O操作的角度來分析,其實不難理解。 一個輸入操作通常包括以下兩個階段: 等待數

原创 HashMap(jdk7)原理分析總結

之所以標明“jdk7”,是因爲jdk8和jdk7中的HashMap實現原理不一樣。jdk7中使用“數組+鏈表”形式來實現哈希表,這與數據結構課上所學的一致。而jdk8在它的基礎上,引入了紅黑樹。本博客先從最原始的“數組+鏈表”形式開始總結梳

原创 【Redis】跳躍表原理分析與基本代碼實現(java)

最近開始看Redis設計原理,碰到一個從未遇見的數據結構:跳躍表(skiplist)。於是花時間學習了跳錶的原理,並用java對其實現。 主要參考以下兩本書: 《Redis設計與實現》跳錶部分:主要介紹跳錶在Redis中如何實現; 《算法

原创 【數據結構與算法】二叉樹——另一棵樹的子樹

另一棵樹的子樹 LeetCode:另一棵樹的子樹 題目描述: 給定兩個非空二叉樹 s 和 t,檢驗 s 中是否包含和 t 具有相同結構和節點值的子樹。s 的一個子樹包括 s 的一個節點和這個節點的所有子孫。s 也可以看做它自身的一棵子樹。

原创 【數據結構與算法】二叉樹——對稱二叉樹

對稱二叉樹 LeetCode:對稱二叉樹 題目描述: 給定一個二叉樹,檢查它是否是鏡像對稱的。 示例: 例如,二叉樹 [1,2,2,3,4,4,3] 是對稱的。 1 / \ 2 2 / \ / \ 3 4 4

原创 【數據結構與算法】二叉樹——路徑總和 III

路徑總和 III LeetCode:路徑總和 III 題目描述: 給定一個二叉樹,它的每個結點都存放着一個整數值。 找出路徑和等於給定數值的路徑總數。 路徑不需要從根節點開始,也不需要在葉子節點結束,但是路徑方向必須是向下的(只能從父節點到

原创 【數據結構與算法】二叉樹——二叉樹的直徑

二叉樹的直徑 LeetCode:二叉樹的直徑 題目描述: 給定一棵二叉樹,你需要計算它的直徑長度。一棵二叉樹的直徑長度是任意兩個結點路徑長度中的最大值。這條路徑可能穿過也可能不穿過根結點。 示例: 給定二叉樹 1

原创 【數據結構與算法】二叉樹——平衡二叉樹

平衡二叉樹 LeetCode:平衡二叉 題目描述: 給定一個二叉樹,判斷它是否是高度平衡的二叉樹。 示例: 給定二叉樹 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15

原创 Java NIO問題記錄:當channel就緒,select()依然返回0?

問題 今天調試NIO後臺發現一個蛋疼的問題。經過調試之後,出現問題的流程描述如下: 客戶端向服務端發送消息,服務端使用IO多路複用處理輸入,即一個selector監聽多個channel。第一條消息正常接收,發送第二條消息時,select()

原创 【數據結構與算法】鏈表——刪除排序鏈表中的重複元素

刪除排序鏈表中的重複元素 LeetCode:刪除排序鏈表中的重複元素 題目描述: 給定一個排序鏈表,刪除所有重複的元素,使得每個元素只出現一次。 示例: 輸入: 1->1->2->3->3 輸出: 1->2->3 思想: 遞歸方法很巧妙,

原创 【數據結構與算法】鏈表——合併兩個有序鏈表

合併兩個有序鏈表 LeetCode:合併兩個有序鏈表 題目描述: 將兩個升序鏈表合併爲一個新的升序鏈表並返回。新鏈表是通過拼接給定的兩個鏈表的所有節點組成的。 示例: 輸入:1->2->4, 1->3->4 輸出:1->1->2->3->4

原创 【數據結構與算法】鏈表——刪除鏈表的倒數第N個節點

刪除鏈表的倒數第N個節點 LeetCode:刪除鏈表的倒數第N個節點 題目描述: 給定一個鏈表,刪除鏈表的倒數第 n 個節點,並且返回鏈表的頭結點。 示例: 給定一個鏈表: 1->2->3->4->5, 和 n = 2. 當刪除了倒數第二