您的位置:首页 > 其它

【LeetCode】162. Find Peak Element (3 solutions)

2014-12-05 23:16 393 查看
Find Peak Element

A peak element is an element that is greater than its neighbors.

Given an input array where
num[i] ≠ num[i+1]
, find a peak element and return its index.

You may imagine that
num[-1] = num
= -∞
.

For example, in array
[1, 2, 3, 1]
, 3 is a peak element and your function should return the index number 2.

click to show spoilers.

Note:
Your solution should be in logarithmic complexity.

这题就是求序列最大值。顺序查找或二分查找均可。

满足复杂度要求的话需要用二分查找。

解法一:顺序查找

class Solution {
public:
int findPeakElement(vector<int>& nums) {
int n = nums.size();
if(n == 1)
return 0;
if(nums[0] > nums[1])
return 0;
if(nums[n-1] > nums[n-2])
return n-1;
for(int i = 1; i < n-1; i ++)
if(nums[i] > nums[i-1] && nums[i] > nums[i+1])
return i;
}
};




解法二:二分查找(递归)

class Solution {
public:
int findPeakElement(vector<int>& nums) {
return Helper(nums, 0, nums.size()-1);
}
int Helper(vector<int>& nums, int low, int high)
{
if(low == high)
return low;
int mid = low + (high-low)/2;
if(nums[mid] > nums[mid+1])
return Helper(nums, low, mid);
else
return Helper(nums, mid+1, high);
}
};




解法三:二分查找(迭代)

class Solution {
public:
int findPeakElement(vector<int>& nums) {
int low = 0;
int high = nums.size()-1;
while(low < high)
{
int mid = low + (high-low)/2;
if(nums[mid] > nums[mid+1])
high = mid;
else
low = mid+1;
}
return low;
}
};


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: