Find Peak Element

线性算法

#include <stdio.h>
#include <vector>
using namespace std;
int findPeakElement(vector<int>& nums) {
if (nums.size()==1) {
return 0;
}
for (int i=1; i<nums.size()-1; i++) {
if (nums[i]>nums[i-1]&&nums[i]>nums[i+1]) {
return i;
}
}
if (nums[0]>nums[1]) {
return 0;
}
else if (nums[nums.size()-1]>nums[nums.size()-2]) {
return nums.size()-1;
}
return 0;
}
二分查找算法




#include <stdio.h>
#include <vector>
using namespace std;
int findPeakElement(vector<int>& nums) {
if (nums.size()==1) {
return 0;
}
int start = 0;
int end = nums.size()-1;
int mid;
while (start<end) {
mid = (start+end)/2;
if (nums[mid]<nums[mid+1]) {
start = mid+1;
}
else{
end = mid;
}
}
return start;
}