本文共 934 字,大约阅读时间需要 3 分钟。
找到数组中的一个位置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); } }}
转载地址:http://kvhld.baihongyu.com/