首页 > 编程语言 > 详细

最大子数组问题

时间:2015-03-24 22:48:37      阅读:309      评论:0      收藏:0      [点我收藏+]

  

编前思路:没有思路,不知如何下手

编程代码:


package practice1; import java.util.Random; import java.util.Scanner; public class practice { public static void main(String[] args) { // TODO 自动生成的方法存根 System.out.print("请输入数组的长度:"); Scanner sr=new Scanner(System.in); int num=sr.nextInt(); int [] sz =new int[num]; Random a=new Random (num); System.out.println("随机产生的数组为:"); for (int i=0;i<num;i++) { sz[i]=a.nextInt(200)-100; System.out.print(sz[i]+" "); } System.out.println(); long maxsum=sz[0]; long left=sz[0]; for(int j=1;j<num;j++) { if(left<0) { left=sz[j]; } else{ left+=sz[j]; } System.out.println("left maxsum "+left+" "+maxsum); maxsum=getmax(left,maxsum); } System.out.println("最大子数组的值为:"+maxsum); } private static long getmax(long a, long b) { // TODO 自动生成的方法存根 return a>b? a:b; } }

 

结果截图:技术分享技术分享

 

 

编后反思:

首先介绍一下这个程序的算法

首先把最左边第一个值设为最大子数组值,和左边最大子数组值,

然后不断的加一个数,然后比较最大子数组值和左边最大子数组值得大小,

如果左边最大指数组值出现负数,则让左边最大子数组值为下一个数(也就是说舍弃),

直到加完整个数组位置,然后输出最大值。

这个程序的思想就是把问题的规模不断的缩小,直到能处理为止。通过这个算法,收益良多,这种化繁为简的思想能快速的帮助我们解决问题。

 

最大子数组问题

原文:http://www.cnblogs.com/twentytwo/p/4364063.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!