サブ配列には、正と負の両方の数値が含まれています。サブ配列の長さが k 以上になるような最大合計サブ配列を見つける必要があります。
Kadane のアルゴリズムを使用した C++ のコードを次に示します。
#include <iostream>
using namespace std;
int main(){
int n,k;
cin >> n >> k;
int array[n];
int sum = 0;
int maxsum = 0;
int beststarts[n];
for(int i = 0;i < n; i++){
cin >> array[i];
}
for(int i = 0;i < k-1;i ++){
sum = sum+array[i];
beststarts[i] = 0;
}
for(int i = k-1;i < n; i++){ //best end search with min length;
sum = sum+array[i];
int testsum = sum;
if(i > 0){
beststarts[i] = beststarts[i-1];
}
for(int j = beststarts[i] ;i-j > k-1;j ++){
testsum = testsum - array[j];
if(testsum > sum){
beststarts[i] = j+1;
sum = testsum;
}
}
if(sum > maxsum){
maxsum = sum;
}
}
cout << maxsum;
return 0;
}
私のコードは正常に動作していますが、非常に遅く、コードを改善する方法が思い浮かびません。私はこの質問も読みました 合計がKで割り切れる最長の部分配列を見つけますが、それは私が望むものではありません。長さはkよりも大きくなる可能性があります。