給出了整數K
和由N
整數組成的非空零索引數組A
。 一對整數(P,Q),使得0 ≤ P ≤ Q < N
被稱爲陣列A的切片。如何減少計算O(N)有界切片數的時間複雜度?
Bounded_slice是切片,其中切片中的最大值和最小值之間的差小於或等於到K.更準確地說,它是一個切片,例如max(A[P], A[P + 1], ..., A[Q]) − min(A[P], A[P + 1], ..., A[Q]) ≤ K
。 目標是計算有界數量。
我的解決方案如下:
int solution(int K, int A[], int N){
// write your code in C90
int p, q, max, min, bndSlice = N;
for(p = 0; p < (N - 1); p++){
for(q = (p + 1); q < N; q++){
MaxMinSlice(A, p, q, &max, &min);
if((max - min) <= K){
bndSlice++;
}
if(bndSlice > 1000000000){
return 1000000000;
}
}
}
return bndSlice;
}
void MaxMinSlice(int A[], int p, int q, int *max, int *min){
int i;
*max = *min = A[p];
for(i = p; i <= q; i++){
if(*max < A[i]){
*max = A[i];
}
if(*min > A[i]){
*min = A[i];
}
}
}
如何減少上面的代碼的時間複雜度爲O(N)?
我已發佈O(N)的答案在同一個問題在http://stackoverflow.com/questions/21251707) –
可能重複的[計數綁定編切片codility](http://stackoverflow.com/questions/21251707/counting-bounded-slice-codility) –
小更正: 爲(P = 0; p