刷題-力扣-852
阿新 • • 發佈:2021-06-15
852. 山脈陣列的峰頂索引
題目連結
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/peak-index-in-a-mountain-array/
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
題目描述
符合下列屬性的陣列 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 ,返回任何滿足 arr[0] < arr[1] < ... arr[i - 1] < arr[i] > arr[i + 1] > ... > arr[arr.length - 1] 的下標 i 。
示例 1:
輸入:arr = [0,1,0]
輸出:1
示例 2:
輸入:arr = [0,2,1,0]
輸出:1
示例 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
提示:
- 3 <= arr.length <= 104
- 0 <= arr[i] <= 106
- 題目資料保證 arr 是一個山脈陣列
進階:很容易想到時間複雜度 O(n) 的解決方案,你可以設計一個 O(log(n)) 的解決方案嗎?
題目分析
- 根據題目描述求山脈陣列的峰值索引
- 使用二分查詢
程式碼
class Solution { public: int peakIndexInMountainArray(vector<int>& arr) { int left = 0; int right = arr.size() - 2; int mid = left + (right - left) / 2; while (left < right) { mid = left + (right - left) / 2; if (arr[mid] > arr[mid + 1]) right = mid; else left = mid + 1; } return left; } };