https://leetcode.com/problems/find-peak-element/
找到数组中的一个位置nums[i] > nums[i + 1] && nums[i] > nums[i - 1]。
二分查找,注意len=1以及首尾两个的边界情况。两解,递归非递归。
解法一:非递归
public class Solution {
public int findPeakElement(int[] nums) {
int beg = 0;
int end = nums.length - 1;
while (beg < end) {
int mid = beg + (end - beg) / 2;
if (nums[mid] < nums[mid + 1]) {
beg = mid + 1;
} else {
end = mid;
}
}
return beg;
}
}
public class Solution {
public int findPeakElement(int[] nums) {
return partition(nums, 0, nums.length - 1);
}
private int partition(int[] nums, int beg, int end) {
if (beg == end) {
return beg;
}
int mid1 = beg + (end - beg) / 2;
int mid2 = mid1 + 1;
if (nums[mid1] < nums[mid2]) {
return partition(nums, mid2, end);
} else {
return partition(nums, beg, mid1);
}
}
}