动态规划之最大子数组问题

输入一个整数数组,数组中有正数也有负数,找到具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和以及连续子数组的起始位置。
要求:用动态规划策略实现,并分析其时间复杂度。

在这里插入图片描述

public class Continuous {

 public static void main(String[] args) {

 // TODO Auto-generated method stub

  int []a= {1,-2,4,5,-2,8,3,-2,6,3,7,-1};

  int []d = new int [12];

  int []rec = new int [12];

  int p=0,q=0;

  d[11]=-1;

  rec[11]=11;

  for (int i =11-1; i >=0;i--) {

 if(d[i+1]>0) {

 d[i]=d[i+1]+a[i];

 rec[i]=rec[i+1];

 if(d[i]>p) {

 p=d[i];

 q=i;

 }

 }else {

 d[i]=a[i];

 rec[i]=i;

 }

 }

   System.out.println("最后的D数组为:");

 for (int j = d.length-1; j >=0; j--) {

 System.out.print(" d["+j+"]=="+d[j]);

 }System.out.println();

 System.out.println("最后的Rec数组为");

 for (int k = rec.length-1; k >=0; k--) {

 System.out.print(" rec["+k+"]=="+rec[k]);

 }System.out.println();

 System.out.println("子数组中最大为:"+p);

 System.out.println("最大子数组为第"+(q+1)+"个数到第"+(rec[q]+1)+"个数");

 System.out.print("最大子数组为:");

 for (int i = q; i <= rec[q]; i++) {

 System.out.print(a[i]+" ");

 }

 }

}

运行截图:
在这里插入图片描述

原创文章 85 获赞 35 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43786637/article/details/105166394