方法一:遍历法
由于题中规定了相邻两个元素不相等,且最大值两侧一定严格的小于最大值。所以可以遍历数组找出最大值对应的位置。
代码如下:
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;
}
}
文章介绍了两种方法在给定整数数组中找到峰值元素:一种是遍历法,通过比较相邻元素找到最大值的位置;另一种是二分法查找,利用数组有序性假设进行搜索。两种方法均适用于满足特定条件的数组。
591





