本文已参与「新人创作礼」活动,一起开启掘金创作之路。
问题
给定一个长度为n的数组nums,请你找到峰值并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个所在位置即可。
思路
- 数组为空或者只有一个元素时,返回 0
- 判断峰值位于边界的情况,起始或结尾位置元素大于相邻的元素时,返回边界位置
- 判断峰值位于数组中间情况
代码实现
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型vector
* @return int整型
*/
int findPeakElement(vector<int>& nums) {
// write code here
int len = nums.size();
// 只有一个元素或没有元素时,返回 0
if (len == 0 || len == 1) return 0;
// 数组起始位置或结尾大于相邻元素时,返回边界位置
if (nums[0] > nums[1]) return 0;
if (nums[len - 1] > nums[len - 2]) return len - 1;
int pre = 0;
int cur = 1;
int next = 2;
while (next < nums.size())
{
// 返回峰值位置
if (nums[pre] < nums[cur] && nums[next] < nums[cur])
{
return cur;
}
next++;
cur++;
pre++;
}
return -1;
}
};