原创 同步阻塞BIO與同步非阻塞NIO

//模擬服務器端 import java.io.InputStream; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.n

原创 異常相關

Java的異常(包括Exception和Error)分爲檢查異常(checked exceptions)和非檢查的異常(unchecked exceptions)。其中根據Exception異常進行劃分,可分爲運行時異常和非運行時

原创 單例設計模式

單例模式主要是爲了避免因爲創建了多個實例造成資源的浪費,且多個實例由於多次調用容易導致結果出現錯誤,而使用單例模式能夠保證整個應用中有且只有一個實例。 //單例模式的餓漢式 class Singleton1{ privat

原创 LeetCode 33——搜索旋轉排序數組

假設按照升序排序的數組在預先未知的某個點上進行了旋轉。 ( 例如,數組 [0,1,2,4,5,6,7] 可能變爲 [4,5,6,7,0,1,2] )。 搜索一個給定的目標值,如果數組中存在這個目標值,則返回它的索引,否則返回 -1

原创 LeetCode 26——刪除排序數組中的重複項

給定一個排序數組,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後數組的新長度。 不要使用額外的數組空間,你必須在原地修改輸入數組並在使用 O(1) 額外空間的條件下完成。 示例 1: 給定數組 nums =

原创 LeetCode 80——刪除排序數組中的重複項 II

給定一個排序數組,你需要在原地刪除重複出現的元素,使得每個元素最多出現兩次,返回移除後數組的新長度。 不要使用額外的數組空間,你必須在原地修改輸入數組並在使用 O(1) 額外空間的條件下完成。 示例 1: 給定 nums =

原创 LeetCode 24——兩兩交換鏈表中的節點

給定一個鏈表,兩兩交換其中相鄰的節點,並返回交換後的鏈表。 注意:你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。 示例: 給定 1->2->3->4, 你應該返回 2->1->4->3. class Lis

原创 LeetCode20 有效的括號

給定一個只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判斷字符串是否有效。 有效字符串需滿足: 左括號必須用相同類型的右括號閉合。 左括號必須以正確的順序閉合。 注意空字符串可被認爲是有效字符串。 示例

原创 LeetCode 19 刪除鏈表的倒數第N個節點

給定一個鏈表,刪除鏈表的倒數第 n 個節點,並且返回鏈表的頭結點。 示例: 給定一個鏈表: 1->2->3->4->5, 和 n = 2. 當刪除了倒數第二個節點後,鏈表變爲 1->2->3->5. 說明:給定的 n 保證是有

原创 LeetCdoe 801——使序列遞增的最小交換次數(動態規劃)

有兩個長度相等且不爲空的整型數組 A 和 B 。我們可以交換 A[i] 和 B[i] 的元素。注意這兩個元素在各自的序列中應該處於相同的位置。 在交換過一些元素之後,數組 A 和 B 都應該是嚴格遞增的(數組嚴格遞增的條件僅爲A[

原创 動態規劃小結

動態規劃算法一般遵循一套固定的流程:遞歸的暴力解法 -> 帶備忘錄的遞歸解法 -> 非遞歸的動態規劃解法。 package dynamic_programming; /** * @program: Aglorithm * @

原创 面試中的怎麼體現出算法

很多前端都覺得算法是特別高大上的東西,但其實和人工智能這種硬核(雖然調參也不怎麼硬核)的東西不同,算法可能會複雜,也可能很容易理解。 比如這道題就是一個非常經典的題目,很多公司的面試都會聊這道題。 這道 medium 難度的問

原创 只出現一次的數字——位運算

只出現一次的數字 給定一個非空整數數組,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。 說明:你的算法應該具有線性時間複雜度。 你可以不使用額外空間來實現嗎? 示例 1: 輸入: [2,2,1

原创 分發糖果

老師想給孩子們分發糖果,有 N 個孩子站成了一條直線,老師會根據每個孩子的表現,預先給他們評分。 你需要按照以下要求,幫助老師給這些孩子分發糖果:每個孩子至少分配到 1 個糖果。 相鄰的孩子中,評分高的孩子必須獲得更多的糖果。 那

原创 LeetCode 23合併兩個有序鏈表

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