繁体   English   中英

最大子阵列算法

[英]Maximum Subarray Algorithm

我打算使用下面的函数来检测给定数组的最大子数组,但是,我需要检测到的最大子数组的开始和结束索引。 如何实现它们,以便它们为我提供检测到的最大子阵列的开始和结束?

谢谢你。

int maxSubarraySum (int A[], int low, int high)
{
   if (low == high)
      return A[low]
  else
     {
      int mid = low + (high - low)/2
      int left_sum = maxSubarraySum (A, low, mid)
      int right_sum = maxSubarraySum (A, mid+1, high)
      int crossing_Sum = maxCrossingSum(A, low, mid, high)
 
      return max (left_sum, right_sum, crossing_Sum)
     }
}


int maxCrossingSum(int A[], int l, int mid, int r)
{
  int sum = 0
  int lsum = INT_MIN
  for(i = mid to l)
   {
      sum = sum + A[i]
      If (sum > lsum)
      lsum = sum
   }
  sum = 0
  int rsum = INT_MIN
  for(i = mid+1 to r)
   {
      sum = sum + A[i]
      If (sum > rsum)
      rsum = sum
   }
return (lsum + rsum)
}

在 maxSubarraySum() 中的 return 语句之前,检查 left_sum、right_sum 和 crossing_Sum 之间哪个是最高的,然后使用保存目前获得的当前最大值的全局变量进行检查。 如果新的最大值更高,则将开始和结束索引保存在另外 2 个全局变量中。 不是一个干净的解决方案,但可以完成工作!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM