これは、特定の配列からサブ配列(連続)の最大合計を見つけるための私のプログラムです。kadane のアルゴリズムを使用すると非常に簡単です。
#include <iostream>
#include <cstdio>
using namespace std;
int kadane(int a[], int n) {
int max_ending_here = a[0], max_till_now = a[0];
int _start = 0, _end;
bool s=true;
for (int i = 1; i < n; ++i)
{
max_ending_here = max(a[i], max_ending_here + a[i]);
if(max_ending_here + a[i] > a[i] && s==false) _start = i, s=true;
max_till_now = max(max_ending_here, max_till_now);
if(max_ending_here + a[i] < a[i] && s==true) _end=i-1,s=false;
}
printf("S = %d , E = %d\n",_start,_end);
return max_till_now;
}
int main(int argc, char const *argv[])
{
//int a[10] = {1,-3,2,-5,7,6,-1,-4,11,-23};
int a[6] = {-8,-1,-1,-1,-1,-5};
int m = kadane(a, 6);
printf("%d\n",m);
return 0;
}
しかし、最大合計を持つ連続したサブ配列の開始位置と終了位置も見つけたいです。それを行うために上記のプログラムに数行追加しようとしましたが、うまくいきませんでした。私の質問は、最大合計を持つそのサブ配列の開始位置と終了位置を取得するにはどうすればよいですか? ありがとう。