📅  最后修改于: 2023-12-03 15:42:16.784000             🧑  作者: Mango
给定长度为 n 的数组 arr,找到数组中的峰值元素。峰值元素是大于或等于其相邻元素的元素。
例如,在数组 [1, 2, 3, 1] 中, 3 是一个峰值元素,而在数组 [1, 2, 3, 4] 中, 4 是一个峰值元素。
请注意,数组可能包含多个峰值元素,您需要返回其中任何一个。
实现函数 int FindPeakElement(int[] arr, int n)
。
输入:arr = [1, 2, 3, 1], n = 4
输出:2
解释:数组 arr 中的 3 是一个峰值元素,其下标为 2。
输入:arr = [1, 2, 1, 3, 5, 6, 4], n = 7
输出:1 或 5
解释:数组 arr 中的 2 或 6 是峰值元素,其下标分别为 1 和 5。
输入:arr = [3, 2, 1], n = 3
输出:0
解释:数组 arr 中的 3 是峰值元素,其下标为 0。
题目要求我们找到峰值元素,峰值元素是大于或等于其相邻元素的元素。我们可以使用二分法,从数组中间开始判断其是否当前元素是否峰值。
这种方法是基于二分法的,时间复杂度为 O(logn)。
public class Solution {
public int FindPeakElement(int[] nums) {
int left = 0, right = nums.Length - 1;
while(left<right){
int mid = left + (right - left) / 2;
if(nums[mid] > nums[mid+1]){
right = mid;
}else{
left = mid + 1;
}
}
return left;
}
}