这个题目没有什么特别的地方,可以使用顺序查找在O(n)完成,但使用二分查找的思想可以在O(logn)完成
顺序查找也有些小技巧
虽然不是有序表,但也可以使用二分查找的思想解答
我的代码(很挫)
<span style="font-family:Microsoft YaHei;font-size:14px;">int findPeakElement(int num[], int n) {
if(n == 1) return 0;
if(n == 2){
if(num[0] > num[1]){
return 0;
}else{
return 1;
}
}
int i;
for(i = 0; i < n; i++){
if(i == 0){
if(num[i] > num[i+1])
return i;
}else if(i == n-1){
if(num[i] > num[i-1])
return i;
}else{
if((num[i] > num[i-1]) && (num[i] > num[i+1]))
return i;
}
}
}</span>
参考的代码:
<span style="font-family:Microsoft YaHei;font-size:14px;">int findPeakElement(int num[], int n) {
int i;
for(i = 1; i < n; i++){
if(num[i] < num[i-1])
return i-1;
}
return n - 1;
}</span>
二分查找的代码:
<span style="font-family:Microsoft YaHei;font-size:14px;">int findPeakElement(int num[], int n) {
int low = 0;
int high = n -1;
while(low < high){
int mid1 = (low + high)/2;
int mid2 = mid1 + 1;
if(num[mid1] < num[mid2])
low = mid2;
else
high = mid1;
}
return low;
}</span>
https://oj.leetcode.com/discuss/17793/find-the-maximum-by-binary-search-recursion-and-iteration