一、852.山脉数组的峰顶索引
题目链接:852.山脉数组的峰顶索引
题目解析:
- 给我们一个数组,元素是先递增在递减的,让我们返回最大元素下标。
1.1 二分查找
解题思路:
- 我们这个数组本来就是一个被天然分成两段,递增区间和递减区间,的数据,天然使用二分查找的题。
- 当 mid 的元素小于后一个元素的时候,mid 在递增区间,所以 left = mid + 1。
- 当 mid 的元素大于后一个元素的时候,mid 在递减区间,所以 right = mid。
解题代码:
//时间复杂度:O(logN)
//空间复杂度:O(1)
class Solution {
public int peakIndexInMountainArray(int[] arr) {
int left = 0;
int right = arr.length - 1;
while (left < right) {
int mid = left + (right - left) / 2;
if (arr[mid] < arr[mid + 1]) {
left = mid + 1;
} else {
right = mid;
}
}
return left;
}
}
1.2 暴力枚举
解题思路:
- 直接使用 for 循环遍历数组,该下标元素大于前面和后面元素,返回下标。
- 因为这个数组一定是一个山脉数组,所以不用管数组头和尾。
解题代码:
//时间复杂度:O(n)
//空间复杂度:O(1)
class Solution {
public int {
( ; i < arr.length - ; i++) {
(arr[i] > arr[i - ] && arr[i] > arr[i + ]) {
i;
}
}
;
}
}


