最大子数组问题

  

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

编程代码:


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; } }

 

结果截图:

 

 

编后反思:

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

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

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

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

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

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

 

posted @ 2015-03-24 21:34  twenty丶two  阅读(230)  评论(1编辑  收藏  举报