leetcode.852 山脈陣列的峰頂索引
阿新 • • 發佈:2018-11-14
我們把符合下列屬性的陣列 A
稱作山脈:
A.length >= 3
- 存在
0 < i < A.length - 1
使得A[0] < A[1] < ... A[i-1] < A[i] > A[i+1] > ... > A[A.length - 1]
給定一個確定為山脈的陣列,返回任何滿足 A[0] < A[1] < ... A[i-1] < A[i] > A[i+1] > ... > A[A.length - 1]
的 i
示例 1:
輸入:[0,1,0]
輸出:1
示例 2:
輸入:[0,2,1,0]
輸出:1
提示:
3 <= A.length <= 10000
- 0 <= A[i] <= 10^6
- A 是如上定義的山脈
思路一:遍歷得出下陣列中最大的數,並返回其下標。
程式碼:
class Solution { public int peakIndexInMountainArray(int[] A) { int max = A[0]; int a = -1; for(int i = 1; i < A.length; i++){ if(A[i] > max) { max = A[i]; a = i; } } return a; } }
思路二:利用二分的思想,從 0 到 A.length - 1 遍歷並判斷:如果得出的 mid 中位數的值大於左邊的數,而小於右邊的數,就將區間變為 mid ~ A.length-1,不然的話就是在 0 ~ mid 中繼續找,知道找到 mid 的值大於前一個數和後一個數。
程式碼:
class Solution { public int peakIndexInMountainArray(int[] A) { return find(0, A.length-1, A); } private int find( int i, int j, int[] A ){ int mid = (i+j)/2; if( A[mid-1] < A[mid] && A[mid] < A[mid+1]){ return find(mid, j, A); }else if( A[mid-1] < A[mid] && A[mid] > A[mid+1] ){ return mid; }else{ return find(i, mid, A); } } }