我正在爲一維數組編寫峯值查找算法的代碼。我已閱讀此帖Peak finding algorithm。這正是我想要做的,有關時間複雜性的討論,但沒有任何僞代碼。問題:查找給定數組的一維峯值
給定一個數組
[a,b,c,d,e,f,g]
其中a
到g
是數字,b
是一個高峯,當且僅當a<=b
和b>=c
。
示例:給定數組{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)的' –
@ user1988876:這將如何工作,我需要通過整個陣列來查找峯值。所以時間複雜度必須是'O(n)' – eagertoLearn
你有興趣找到一個峯值,而不是所有的峯值。 –