编前思路:没有思路,不知如何下手
编程代码:
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;
}
}
结果截图:
编后反思:
首先介绍一下这个程序的算法
首先把最左边第一个值设为最大子数组值,和左边最大子数组值,
然后不断的加一个数,然后比较最大子数组值和左边最大子数组值得大小,
如果左边最大指数组值出现负数,则让左边最大子数组值为下一个数(也就是说舍弃),
直到加完整个数组位置,然后输出最大值。
这个程序的思想就是把问题的规模不断的缩小,直到能处理为止。通过这个算法,收益良多,这种化繁为简的思想能快速的帮助我们解决问题。