原创 對Spring MVC攔截器的理解

在平常練手的項目中,對於用戶認證以及用戶權限管理往往都是通過SpringMVC 攔截器以及其他手段進行處理,然而當項目規模變大,系統安全性要求增加的時候,基於SpringMVC 攔截器等實現的用戶認證功能已經不能滿足系統需求。常見的手段爲利

原创 【LeetCode】5638.喫蘋果的最大數目

題目鏈接 5638. 喫蘋果的最大數目 題目描述 解題思路 貪心+優先隊列 就和平時喫零食一樣,優先把快過期的零食喫完,同理,在本題中優先喫那些即將過期的蘋果. 如何才能知道現在那些蘋果最快就要過期,這些快要過期的蘋果又還剩餘幾個呢??

原创 【LeetCode】42.接雨水

題目鏈接 42. 接雨水 題目描述 解題思路 暴力法(按列求取雨水值) 因爲首尾元素不可能存在雨水,所以可以不用考慮首尾元素。 對於剩餘的每個元素,分別計算從該元素開始,從左和從右開始開始的最大值,然後當前元素對應的能夠接的雨水值 = M

原创 【LeetCode】290.單詞規律(雙映射)

題目鏈接 290. 單詞規律 題目描述 解題思路 雙哈希表 需要處理兩個映射關係:pattern -> str,以及str -> pattern。 如果只考慮pattern -> str的映射關係,則pattern = "abba",st

原创 【LeetCode】84.柱狀圖中最大的矩形

題目鏈接 84. 柱狀圖中最大的矩形 題目描述 解題思路 暴力法 對於每一個高度height[i],我們可以向左向右遍歷,然後算出該高度往左往右最多可以延申至何處,這樣就能算出該高度對應的面積,枚舉所有高度然後求出最大值。 時間複雜度:O

原创 【LeetCode】135.分發糖果

題目鏈接 135. 分發糖果 題目描述 解題思路 貪心法 兩次貪心:從左到右進行貪心選擇,從右到左進行貪心選擇 題目中說到:相鄰的孩子中,評分高的孩子必須獲得更多的糖果。這裏的相鄰包含兩種情況:左相鄰和右相鄰,我們不能一次性把左相鄰和右相

原创 【LeetCode】三題解決常見異或運算題

題目一 1.1 題目鏈接 136. 只出現一次的數字 1.2 題目描述 1.3 解題思路 1.位運算之異或操作 異或的性質如下 (1) 兩個數字異或的結果:a ^ b = 將 a 和 b 的二進制每一位進行運算,得出的數字. (2) 運算

原创 【LeetCode】316.去除重複字母

題目鏈接 316. 去除重複字母 題目描述 解題思路 單調棧的應用 本題的解決可以分爲兩個過程: (1) 去重,使得所有元素只出現一次。 (2) 返回字典序最小 先忽略過程2,利用棧這個數據結構實現去重。去重的原理就是利用isUsed數組

原创 【Leetcode】746.使用最小花費爬樓梯

題目鏈接 746. 使用最小花費爬樓梯 題目描述 解題思路 動態規劃 每次只能一個階梯或者兩個階梯,所以要到達第 i 階,只有兩種方案,從第 i-2 階,或 從 i-1階到達 假設到達第i-2階的最小花費爲p2 到達第i-1階的最小花費

原创 【Leetcode】49.字母異位分詞

題目鏈接 49. 字母異位詞分組 題目描述 解題思路 1.暴力法 兩個for循環,分別判斷兩個字符串出現的字母個數是否相同,相同加入同一個List。時間複雜度基本等於O(n^2),Leetcode上提交是超時的。 2.hash法 對暴力法

原创 深入理解Arrays.sort()自定義排序原理

深入理解Arrays.sort()自定義排序原理 sort()方法會接受一個比較函數compare(a, b),該函數要比較兩個值,然後返回一個用於說明這兩個值的相對順序的數字。 最後,永遠要記住一句話,凡是返回1或者大於0的正數的時候就要

原创 【Leetcode】402.移掉K位數字(單調棧)

單調棧的應用 402. 移掉K位數字 316. 去除重複字母 321. 拼接最大數 1.題目鏈接 402. 移掉K位數字 題目描述 解題思路 一招喫遍力扣四道題,媽媽再也不用擔心我被套路啦~ 貪心+單調棧 本題採用貪心思路+單調棧 如果

原创 【Leetcode】328.奇偶鏈表

題目鏈接 328. 奇偶鏈表 題目描述 解題思路 暴力法 先統計鏈表長度,然後根據鏈表長度決定兩兩交換鏈表中的元素的次數即可。(如果不明白自己畫個圖即可) 拆分爲奇偶鏈表在拼接 維護兩個指針 odd 和 even 分別指向奇數節點和偶數節

原创 【Leetcode】127.單詞接龍(BFS與DFS區別)

題目鏈接 127. 單詞接龍 題目描述 解題思路 題目中有個關鍵詞:最短轉換序列的長度,我們知道常見的搜索算法有兩種:DFS和BFS,那麼本題適用哪種算法呢?兩種都適用嗎? 記住題目中如果出現最短關鍵字一定要採用BFS搜索算法去解決,而不

原创 從ReentrantLock加鎖解鎖角度分析AQS

本文用於記錄在學習AQS時,以ReentrantLock爲切入點,深入源碼分析ReentrantLock的加鎖和解鎖過程。 同步器AQS的主要使用方式是繼承,子類通過繼承同步器並實現它的抽象方法來管理同步狀態(通常鎖或者同步組件內部會實現一