看到公升序,降序等代表有序的詞就可以優先考慮二分法。
設定兩個指標,分別指向第乙個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演算法系列
棧的概念 棧是一種特殊的線性表,堆疊的資料元素以及資料元素之間的關係和線性表是完全一樣的。差別是線性表是在任意位置進行插入和刪除操作,棧是只允許在固定的一端進行插入和刪除,棧的插入和刪除只允許在棧頂,棧的插入和刪除通常稱為進棧和出棧。資料集合 每個資料元素的資料型別可以是任意的型別 操作的集合 進棧...