原创 劍指之從上往下打印二叉樹

從上往下打印出二叉樹的每個節點,同層節點從左至右打印 import java.util.ArrayList; import java.util.Deque; import java.util.LinkedList; /** pub

原创 劍指之包含min函數的棧

定義棧的數據結構,請在該類型中實現一個能夠得到棧中所含最小元素的min函數(時間複雜度應爲O(1)) import java.util.Stack; public class Solution { private Stack

原创 劍指之棧的壓入、彈出序列

輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否可能爲該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的一個彈出序列,但4,3,5,

原创 劍指之矩形覆蓋

我們可以用21的小矩形橫着或者豎着去覆蓋更大的矩形。請問用n個21的小矩形無重疊地覆蓋一個2*n的大矩形,總共有多少種方法? public class Solution { public int RectCover(int

原创 二進制中1的個數

劍指offer之二進制中1的個數 //把一個整數減去1,都是把最右邊的1變成0,再和原整數做&運算,則該整數最右邊的一個1變成0,則有多少個1進行多少次操作 public class Solution { public i

原创 劍指之樹的子結構

輸入兩棵二叉樹A,B,判斷B是不是A的子結構。(ps:我們約定空樹不是任意一個樹的子結構) /** public class TreeNode { int val = 0; TreeNode left = null

原创 數組中出現次數超過一半的數字

      數組中有一個數字出現的次數超過數組長度的一半,請找出這個數字。例如輸入一個長度爲9的數組{1,2,3,2,2,2,5,4,2}。由於數字2在數組中出現了5次,超過數組長度的一半,因此輸出2。如果不存在則輸出0。 import

原创 旋轉數組的最小數字

劍指offer之旋轉數組的最小數字 把一個數組最開始的若干個元素搬到數組的末尾,我們稱之爲數組的旋轉。 輸入一個非減排序的數組的一個旋轉,輸出旋轉數組的最小元素。 例如數組{3,4,5,1,2}爲{1,2,3,4,5}的一個旋轉,

原创 劍指之二叉樹的鏡像

操作給定的二叉樹,將其變換爲源二叉樹的鏡像 /** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = n

原创 斐波那契數列

劍指offer之斐波那契數列 大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項爲0)。 n<=39 public class Solution { public int Fib

原创 劍指之第一個只出現一次的字符

在一個字符串(0<=字符串長度<=10000,全部由字母組成)中找到第一個只出現一次的字符,並返回它的位置, 如果沒有則返回 -1(需要區分大小寫). //最容易想到,也最複雜的方法(不建議) public class Solut

原创 數值的整數次方

給定一個double類型的浮點數base和int類型的整數exponent。求base的exponent次方 public class Solution { static boolean b = false;

原创 劍指之二叉搜索樹與雙向鏈表

題目描述 輸入一棵二叉搜索樹,將該二叉搜索樹轉換成一個排序的雙向鏈表。要求不能創建任何新的結點,只能調整樹中結點指針的指向 非遞歸 /** public class TreeNode { int val = 0;

原创 劍指之構建乘積數組

題目描述 給定一個數組A[0,1,…,n-1],請構建一個數組B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1]。不能使用除法 思路 將B[i]=A[0]A[1]…*A[

原创 BIO、NIO、AIO

在說BIO,NIO,AIO 之前先來看這樣幾個概念:同步與異步,阻塞與非阻塞 同步與異步 同步: 同步就是發起一個調用後,被調用者未處理完請求之前,調用不返回。 異步: 異步就是發起一個調用後,立刻得到被調用者的迴應表示已接收到