最小正序列是这样的一个序列:
1.其序列和大于0
2.在所有序列和大于0的子序列中,其和最小。
c++实现:
typedef struct Node
{
int val;
int index;
}SumSubarray;
bool cmp( const SumSubarray & a, const SumSubarray & b )
{
return a.val < b.val;
}
int FindMinPositiveSubarray( int A[], int len )
{
int sum = 0;
int ans;
SumSubarray sum_subarray[MAX_N];
SumSubarray * sum_substr = sum_subarray;
for ( int i = 0; i < n; i++ )
{
sum += A[i];
sum_subarray[i]->val = sum;
sum_subarray[i]->index = i;
}
AdsSort(sum_substr, sum_substr + 10, cmp ); // 按val升序排列
ans = sum_subarray[0]->val > 0 ? sum_subarray[0]->val : INT_MAX;
for ( int j = 1; j < n; ++j )
{
if ( sum_subarray[i].val - sum_subarray[i - 1].val < result
&& sum_subarray[i - 1].index > sum_subarray[i].index
&& sum_subarray[i].val - sum_subarray[i - 1].val > 0 )
result = sum_subarray[i].val - sum_subarray[i - 1].val;
}
return result;
}
算法复杂度:O( Nlog N )