方法一:遍历法
由于题中规定了相邻两个元素不相等,且最大值两侧一定严格的小于最大值。所以可以遍历数组找出最大值对应的位置。
代码如下:
class Solution {
public int findPeakElement(int[] nums) {
int n = nums.length;
int a = 0;
for(int i = 1; i <n; ++i)
{
if(nums[i]>nums[a])
{
a=i;
}
}
return a;
}
}
方法二:二分法查找
由于题目中提到了可以假设 “ 对于所有有效的 i 都有 nums[i] != nums[i + 1] ”。所以我们可以使用二分查找法来解决这类问题。
class Solution {
public int findPeakElement(int[] nums) {
int l = 0, r = nums.length - 1;
while(l < r)
{
int mid = (l + r) >>1; //为了防止数组越界,也可写为(l+r)/2
if (nums[mid] > nums[mid+1])
{
r = mid;
}
else
{
l = mid+1;
}
}
return r;
}
}