最原始的方法是檢查每乙個數 array[i] ,看是否左邊的數都小於等於它,右邊的數都大於等於它。這樣做的話,要找出所有這樣的數,時間複雜度為o(n^2)。
其實可以有更簡單的方法,我們使用額外陣列,比如rightmin,來幫我們記錄原始陣列array[i]右邊(包括自己)的最小值。假如原始陣列為: array = , 那麼rightmin = . 也就是說,7右邊的最小值為2, 2右邊的最小值也是2。
有了這樣乙個額外陣列,當我們從頭開始遍歷原始陣列時,我們儲存乙個當前最大值 max, 如果當前最大值剛好等於rightmin[i], 那麼這個最大值一定滿足條件。還是剛才的例子。
第乙個值是7,最大值也是7,因為7 不等於 2, 繼續,
第二個值是10,最大值變成了10,但是10也不等於2,繼續,
第三個值是2,最大值是10,但是10也不等於2,繼續,
第四個值是6,最大值是10,但是10不等於6,繼續,
第五個值是19,最大值變成了19,而且19也等於當前rightmin[4] = 19, 所以,滿足條件。
如此繼續下去,後面的幾個都滿足。
public
class
test
else
}int themax = array[0]
;for
(int i=
0;i(array[i]
== arr2[i])}
return0;
}}
面試衝刺演算法系列 21
看到公升序,降序等代表有序的詞就可以優先考慮二分法。設定兩個指標,分別指向第乙個k和最後乙個k,最後乙個k減去第乙個k的索引即可獲得k的個數。public class solutionif firstk 1 lastk 1 return0 public intfindfirstk int array...
面試衝刺演算法系列 40
二叉搜尋樹特點 一棵 bst 左孩子 根結點 右孩子 用於判斷 一棵 bst 的左子樹或者右子樹都是 bst 用於遞迴 後序遍歷最後乙個結點即為根結點 抓住這三個特點進行遞迴即可求解 public class solution public boolean isbst int arr,int sta...
java演算法系列
棧的概念 棧是一種特殊的線性表,堆疊的資料元素以及資料元素之間的關係和線性表是完全一樣的。差別是線性表是在任意位置進行插入和刪除操作,棧是只允許在固定的一端進行插入和刪除,棧的插入和刪除只允許在棧頂,棧的插入和刪除通常稱為進棧和出棧。資料集合 每個資料元素的資料型別可以是任意的型別 操作的集合 進棧...