面試衝刺演算法系列 21

2021-10-23 20:56:41 字數 997 閱讀 9810

看到公升序,降序等代表有序的詞就可以優先考慮二分法。

設定兩個指標,分別指向第乙個k和最後乙個k,最後乙個k減去第乙個k的索引即可獲得k的個數。

public

class

solutionif(

(firstk !=-1

)&&(lastk !=-1

))return0;

}public

intfindfirstk

(int

array,

int k,

int start,

int end)

//利用遞迴獲取第乙個k的值

int mid =

(start+end)

>>1;

//>>1表示右移一位,二進位制數中表示除以2

if(array[mid]

>k)

//若array[mid]>k,表示k在mid的左側

else

if(array[mid]

elseif(

(mid-

1>=0)

&&array[mid-1]

==k)

//若mid前乙個值也是k,說明在mid之前就已經出現了k,所以需要向左一步步

//跟進來獲得第乙個出現k的位置。

else

}public

intfindlastk

(int

array,

int k,

int start,

int end)

else

if(array[mid]

>k)

elseif(

(mid+

1<=end)

&&array[mid+1]

==k)

else

mid =

(start+end)

>>1;

}return-1

;}}

面試衝刺演算法系列 40

二叉搜尋樹特點 一棵 bst 左孩子 根結點 右孩子 用於判斷 一棵 bst 的左子樹或者右子樹都是 bst 用於遞迴 後序遍歷最後乙個結點即為根結點 抓住這三個特點進行遞迴即可求解 public class solution public boolean isbst int arr,int sta...

面試衝刺演算法系列 63

最原始的方法是檢查每乙個數 array i 看是否左邊的數都小於等於它,右邊的數都大於等於它。這樣做的話,要找出所有這樣的數,時間複雜度為o n 2 其實可以有更簡單的方法,我們使用額外陣列,比如rightmin,來幫我們記錄原始陣列array i 右邊 包括自己 的最小值。假如原始陣列為 arra...

java演算法系列

棧的概念 棧是一種特殊的線性表,堆疊的資料元素以及資料元素之間的關係和線性表是完全一樣的。差別是線性表是在任意位置進行插入和刪除操作,棧是只允許在固定的一端進行插入和刪除,棧的插入和刪除只允許在棧頂,棧的插入和刪除通常稱為進棧和出棧。資料集合 每個資料元素的資料型別可以是任意的型別 操作的集合 進棧...