原创 二分變形之排序數組查找數字次數

思路: 找左邊界,找右邊界,做差。 class Solution { public int search(int[] nums, int target) { int res = 0;

原创 棧之字符串解碼

注意: 拼接時把兩個括號直接字符都拿過來,注意順序 考慮多位數的情況 結果拼接順序 class Solution { public String decodeString(String s) { Str

原创 【數組】之宇宙無敵360度反覆橫跳之旋轉打印數組

算法上沒有難度,需要注意邏輯問題設計。 思路: 最容易理解的方法是層層剝開,一圈一圈打印 左上角來兩個指針橫縱座標,右下角也是 寫一個方法用來打印圈 當左上角和右下角撞見了,停止 打印圈: int curR = r1;

原创 【簡單遞歸】之逆序棧

神~經病! 翻來翻去 package com.stack; import java.util.Scanner; import java.util.Stack; /* * 用遞歸逆序棧*/ public class RecS

原创 【層次遍歷】序列化、反序列化二叉樹

藉助輔助隊列,層次操作結果做處理 public class Codec { String res; // 序列化 public String serialize(TreeNode root) { if (roo

原创 X的N次冪

class Solution { public double myPow(double x, int n) { double res = 1.0; for (int i = n; i != 0; i

原创 【睡前水題】之X的平方根

方法一:公式法(瞭解即可,面試別寫,不能調用庫函數) 方法二: 二分查找 class Solution { public int mySqrt(int x) { int l=0,r=x,res=0;

原创 最大正方形兩種解法

方法一:暴力 遍歷二維數組,找到等於‘1’的地方開始 行和列加一(邊界是min(行數-i,列數-j)) 如果等於‘1’,結果加一 class Solution { public int maximalSquare(c

原创 二叉搜索樹轉化爲雙向有序鏈表

思路: 二叉搜索樹中序遍歷即爲有序 找到最左子樹節點,作爲頭節點head 關鍵步驟: 當 pre爲空時: 代表正在訪問鏈表頭節點,記爲 head 當 pre不爲空時: 修改雙向節點引用,即 pre.right = cur,c

原创 【雙遞歸】樹的子樹

雙遞歸 遞歸s樹 遞歸判斷樹左右節點是否相等 判斷兩棵樹是否相同:參數(倆棵樹)、返回值(boolean) 如果t空並且s空,返回T 如果t爲空或者s爲空,返回F 如果t的值不等於s的值,返回F 遞歸兩棵樹左右子樹 cl

原创 複習synchronized之底層原理

synchronized是什麼 關鍵字,Java利用鎖機制實現線程同步的一種方式。 Java實現線程同步的方式: 1.顯式鎖(lock,需要自己寫代碼去獲取鎖和釋放鎖); 2.隱式鎖(synchronized,自動的)。 sy

原创 棧的彈出序列問題

給定棧的壓入序列判斷棧的彈出序列是否合法 附上動圖,一看就會 代碼在此: class Solution { public boolean validateStackSequences(int[] pushed, int

原创 【又是回溯+遞歸】二叉樹路徑和

思路: 帶着sum去遍歷二叉樹,將每一個節點先加進來,不合適就回溯,找到路徑加入到結果集當中; 每一步遞歸要完成:將節點加入,更新目標值 遞歸出口:到底部,node==null 加上回溯 代碼: class Solution

原创 睡前水題:驗證二叉搜索樹

利用二叉樹特性:中序遍歷遞增 方法一: class Solution { long pre = Long.MIN_VALUE; public boolean isValidBST(TreeNode root) {

原创 synchronized的鎖優化

synchronized的鎖優化 鎖的四種狀態 無鎖狀態 偏向鎖 輕量級鎖 重量級鎖 隨着鎖的競爭,鎖可以從偏向鎖升級到輕量級鎖,再升級的重量級鎖,但是鎖的升級是單向的,也就是說只能從低到高升級,不會出現鎖的降級。 偏向鎖