爪哇2博客
爪哇2博客

最大和连续子数组

问题:

从维基百科:
在计算机科学中,最大和连续子数组是在具有最大和的一维数字数组中查找连续子数组的任务。例如,对于值-2、1,-3、4,-1、2、1,-5、4的序列;总和最大的连续子数组是4,-1,2,1,总和为6。

解决方案:

有多种解决方案可以解决此问题:

解决方案1:

使用两个循环并尝试数组元素的每种组合以找到最大和。
时间复杂度:O(N ^ 2)

解决方案2:

卡丹‘s algoritm
我已经讨论过 卡丹‘s algorithm 在以前的帖子中。您可以参考。
时间复杂度:O(N)

解决方案3:

动态编程:
您可以使用动态编程来解决此问题。
可以说array为arr [],并且直到索引i的最大和为maxSum(i)
可以用于动态编程的逻辑:

1
2
3
 
最大总和(i) = 最高 (最大总和(i-1) + a[i] , a[i])
 

所以可以定义为
索引i处的最大和为(i-1以上的最大和+当前元素,当前元素)的最大值
爪哇代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
上市 整型 dynamicProgramForMaxSubArray(整型[] rr) {
整型[] 结果 = 整型[rr.长度];
结果[0]=rr[0];
对于 (整型 i = 1; i < rr.长度; i++) {
结果[i]=数学.最高(结果[i-1]+rr[i], rr[i]);
}
整型 最大总和Array = 结果[0];
对于 (整型 j = 1; j <结果.长度 ; j++) {
如果(最大总和Array<结果[j])
最大总和Array = 结果[j];
}
 
返回 最大总和Array;
}
 

时间复杂度:O(N)

爪哇程序查找最大和的连续子数组:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
组织.Arpit.爪哇2blog;
上市 最高imumSubArrayMain {
/ *动态规划算法,以找到最大和的连续子数组
  */
上市 整型 dynamicProgramForMaxSubArray(整型[] rr) {
  整型[] 结果 = 整型[rr.长度];
  结果[0]=rr[0];
  对于 (整型 i = 1; i < rr.长度; i++) {
   结果[i]=数学.最高(结果[i-1]+rr[i], rr[i]);
  }
   整型 最大总和Array = 结果[0];
         对于 (整型 j = 1; j              如果(最大总和Array<结果[j])
              最大总和Array = 结果[j];
         }
 
  返回 最大总和Array;
}
上市 静态的 虚空 主要( args[]) {
  整型 rr[] = { 1, 8, -3, -7, 2, 7, -1, -9 };
  最高imumSubArrayMain 最大总和 = 最高imumSubArrayMain();
系统..打印(“最大的连续子数组是” + 最大总和.dynamicProgramForMaxSubArray(rr));
}
}
 

当您运行上述程序时,将获得以下输出:

1
2
3
 
最大的 连续 子阵列   9
 


导入联系人

您可能还喜欢:

分享这个

作者

关注作者

相关文章

发表评论

您的电子邮件地址不会被公开。 必需的地方已做标记 *

订阅我们的新闻

获取质量教程到您的收件箱。现在订阅。


成为朋友

©2020 爪哇2博客