查找波峯或者波谷

題目:給定一個沒有重複數字的數組,找出裏面的波峯或者波谷,沒有返回-1。如果有,那麼波峯波谷的兩側是單調的。

思路是二分查找。返回的條件是找到的中間值比兩邊都大或者比兩邊都小。那麼如果不滿足就需要查找左邊或者右邊。在判斷左右之前,我們需要先判斷數組的類型,是包含波峯還是波谷,方法是檢測前兩個值,如果a[0]>a[1],那麼是找波谷,否則找波峯。

下面只看波峯的情況,如果a[m-1] < a[m] < a[m+1],那麼位於遞增區間,此時應該往右,否則往左。波谷的情況類似。

這是存在波峯或者波谷的情況,假設原來的數組的是單調遞增的或者單調遞減的,那麼就應該返回-1,如果用上面的邏輯就會越界,因爲肯定每一次都是往某一個方向,最後就到了最邊的那一個元素,此時用a[m-1]或者a[m+1]的時候會越界那麼一旦說m到了最邊界,可以說肯定不存在了,只需要返回-1就行,如果存在肯定不會是最兩邊的元素,在到了最邊的元素之前就已經return了,所以檢測到到了最邊的時候,就返回-1。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章