最大接连子数组之和alibaba - 亚美娱乐

最大接连子数组之和alibaba

2019-02-11 10:40:01 | 作者: 代萱 | 标签: 数组,时分,元素 | 浏览: 5953

一个有N个整数元素的一维数组( A[0], A[1], ... , A[n-2], A[n-1]),子数组之和的最大值是什么?(要求子数组的元素是接连的)

 

给人典型的动态规划的感觉。先求到前面i个元素的最大子数组之和max,然后在此基础上考虑i+1的状况,直至n方位。

 

public class MaxSubArray{
 public static void main(String[] args){
 int[] a = new int[]{ -2, 5, 3, -6, 4, -8, 6};
 System.out.println(getMax(a));
 public static int getMax(int[] a){
 //max保存的是最大值
 int max = a[0];
 //max2保存的是遍历过程中或许的最大值
 int max2 = a[0];
 for(int i=1;i a.length;i++){
 //一共4种状况
 //1. a[i] 0,max2 0 : 这个时分二者相加是或许的最大值
 //2. a[i] 0,max2 0 :这个时分a[i]是或许的最大值
 //3. a[i] 0,max2 0 : 这个时分二者相加是或许的最大值
 //4. a[i] 0,max2 0 :这个时分a[i]是或许的最大值
 if(a[i] =0){
 if(max2 = 0){
 max2 += a[i];
 }else{
 max2 = a[i];
 }else{
 if(max2 = 0){
 max2 += a[i];
 }else{
 max2 = a[i];
 if(max2 max){
 max = max2;
 return max;
}

 

 

代码精简后

public class MaxSubArray{
 public static void main(String[] args){
 int[] a = new int[]{ -2, 5, 3, -6, 4, -8, 6};
 System.out.println(getMax(a));
 public static int getMax(int[] a){
 //max保存的是最大值
 int max = a[0];
 //max2保存的是遍历过程中或许的最大值
 int max2 = a[0];
 for(int i=1;i a.length;i++){
 //max2大于0,则相加或许得到最大值
 if(max2 = 0){
 max2 += a[i];
 //max2小于0,则相加不或许到达最大值,直接取a[i]
 else{
 max2 = a[i];
 //更新最大值
 if(max2 max){
 max = max2;
 return max;
}
版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表亚美娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章

阅读排行

  • 1

    PHP源码加密sohu

    加密,文件,目录
  • 2
  • 3
  • 4

    最大接连子数组之和alibaba

    数组,时分,元素
  • 5

    python规范库学习系列1环球

    目标,函数,元素
  • 6
  • 7

    JDBC 的三个Wmingxing

    进程,目标,办法
  • 8
  • 9

    JAVA根底 之 GUIITeyefenghuang

    组件,按钮,文本框
  • 10

    JAVA根底 之 MathITeyesina

    职业,软件,计算机