162. 寻找峰值
public int findPeakElement(int[] nums) {
int low = 0;
int high = nums.length - 1;
while (low < high) {
int mid = low + (high - low) / 2;
if (nums[mid] < nums[mid + 1]) {
low = mid + 1;
} else {
high = mid;
}
}
return low;
}
解题思路
- 初读题觉得这就是一道简单题,再看还是觉得这是一道简单题;
- 方案一:遍历数组找到一个波峰(大于左右值)就能直接返回该下标,时间复杂度O(n);
- 方案二:题目要求时间复杂度为O(logn),就是直接告诉你用二分查找法
1)题目要求找到一个波峰返回就行,那题目就能理解为 给定数组为 仅有一个波峰的数组,通过二分查找找到该数组的最大值;
2)如果中值比下一个值小,那么就代表波峰在中值之后,反之在中值之前,就是这样。没了 - 👌