樣品輸入: 1 2 3 4 5
(數組元素) m = 1
(奇數) 示例輸出: 8
。 子陣列是[[1]
,[1,2]
,[2,3]
,[2,3,4]
,[3]
,[3,4]
,[4,5]
,[5]
]給定一個數組找到m個奇數的子數組的數量?
這是我的implementation.In最壞的情況下,這將需要O(N + N^2).Are有任何優化此代碼的方法?
int main() {
int n, *a, count1=0, m, *dp;
cin>>n;
a = new int[n];
dp =new int[n];
for(int i=0; i<n; i++) {
cin >> a[i];
}
cin >> m;
for(int i=0; i<n; i++){
if(a[i]%2==1) {
count1++;
}
dp[i] =count1;
}
int prev;
long count=0;
for(int i=0; i<n; i++) {
prev= i==0 ? 0:dp[i-1];
for(int j=i; j<n; j++) {
if((dp[j] - prev) == m){
count++;
}
if(dp[j] - prev > m){
break;
}
}
}
cout<<count;
}
正如興趣點,大O表示法往往只用最顯著項,因此你的算法會爲O(n^2)。 – paxdiablo