样例输入:
1 2 3 4 5
(数组元素)
m = 1
(奇数)
样例输出:
8
。
子数组为[[1]
, [1,2]
, [2,3]
, [2,3,4]
, [3]
, [3,4]
, [4,5]
, [5]
]。
这是我的实现。在最坏情况下,它需要O(n+n^2)的时间复杂度。是否有任何方法可以优化这段代码?
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;
}