LeetCode——劍指 Offer II 069. 山峰陣列的頂部(Java)
阿新 • • 發佈:2021-10-14
題目描述
題幹: 符合下列屬性的陣列 arr 稱為 山峰陣列(山脈陣列) : arr.length >= 3 存在 i(0 < i< arr.length - 1)使得: arr[0] < arr[1] < ... arr[i-1] < arr[i] arr[i] > arr[i+1] > ... > arr[arr.length - 1] 給定由整陣列成的山峰陣列 arr ,返回山峰頂部的下標 i 示例 1: 輸入:arr = [0,1,0] 輸出:1 示例 2: 輸入:arr = [1,3,5,4,2] 輸出:2 示例 3: 輸入:arr = [0,10,5,2] 輸出:1 示例 4: 輸入:arr = [3,4,5,1] 輸出:2 示例 5: 輸入:arr = [24,69,100,99,79,78,67,36,26,19] 輸出:2
題解思路
返回山峰頂部的下標,因為返回下標所以我們不能進行排序,不過陣列已經是山峰陣列我們可以直接遍歷
從頭開始遍歷,直到遇到一個數字比後面的數字大的下標,就可以返回當前下標了
當然這種遍歷的問題肯定離不開二分查詢,這裡的條件還是當前數字比後面數字大就移動標誌
正確程式碼
public int peakIndexInMountainArray(int[] arr) { int left = 0, right = arr.length, ans = 0; while (left <= right) { int mid = left + (right - left) / 2; if (arr[mid] > arr[mid + 1]) { ans = mid; right = mid - 1; } else { left = mid + 1; } } return ans; }
總結
無數的題目告訴我不是隻有排序的陣列才能用二分查詢,但是每次這種奇怪規律的條件就很容易繞
如果文章存在問題或者有更好的題解,歡迎在評論區斧正和評論,各自努力,你我最高處見