201.9.26
这也是很鸡贼的一道题啊,开始对lintcode没有好感了。
这题我只知道顺序遍历啊。可是顺序遍历会超时啊。
然后从网上搜索了他人的答案,说要用二分查找,但是二分查找只有在有序的时候才可以使用啊。
更加神奇的是,我用二分查找居然通过了。我就呵呵了。然后我自己写了一个测试用例【11,10,9,8,10,7】根本无法通过啊,也不知道在搞什么。
恕我直言,真是垃圾。
下边的代码,第一个是二分查找的,也就是莫名其妙AC的代码。
public class Solution {
/*
* @param A: An integers array.
* @return: return any of peek positions.
*/
public int findPeak(int[] A) {
int begin = 0;
int end = A.length - 1;
while(begin < end) {
int mid = begin + (end - begin)/2;
if(mid == 0)
return 1;
if(mid == A.length - 1)
return mid - 1;
if(A[mid] > A[mid - 1] && A[mid] > A[mid + 1])
return mid;
else if(A[mid] < A[mid - 1])
end = mid - 1;
else
begin = mid + 1;
}
return begin;
}
public int findPeak1(int[] A) {
int length = A.length;
int i = 0;
for(i = 1; i < length - 1; i++){
if(A[i] > A[i-1] && A[i] > A[i+1]){
return i;
}
}
return i;
}
}