我正在编写一个用于1D数组的峰值查找算法的代码。我阅读了这篇帖子Peak finding algorithm,这正是我想做的事情,讨论了时间复杂度,但没有伪代码。问题是:
给定一个数组
例如:给定一个数组
给定一个数组
[a,b,c,d,e,f,g]
,其中a
到g
都是数字,如果且仅当a<=b
和b>=c
时,b
是一个峰值。例如:给定一个数组
{1,2,3,4,5,19,25,20}
,应该返回索引6
。
边缘情况应该给出:
{100,4,3,1,19,20} -- index 0
{1,3,5,19,20} -- index 4
我已经在Java中实现了代码,我的当前运行时间为O(n)
。我想知道是否可以改进。public static int naive(int[] arr){
int l=arr.length;
if (arr[0]>=arr[1]) {
return 0;
}
if (arr[l-1]>arr[l-2]){
return l-1;
}
for (int i=1; i < arr.length-1;i++){
if (arr[i] >= arr[i-1] && arr[i] >= arr[i+1] ){
return i;
}
}
return -1;
}
O(log n)
的时间复杂度。 - brain stormO(n)
。 - eagertoLearn