设计思路:
计算前i-1个数的和,如果他们的和加上第i个的和大于第i个数,那么保留和,如果是小于的话就让最大值等于第i个数的值,这样依次类推,可以得到最大的和。
出现的问题:
如果第i个数为负数的话,这样有可能导致最后加上一个负数,使最大和值变小
可能的解决方案:
定义一个变量记住加上负数之前的值。
源代码:
import java.util.Scanner; public class Maxsum { public static void main(String[] args) { // TODO Auto-generated method stub int max,a; System.out.println("请输入数字的长度:"); Scanner sc1 = new Scanner(System.in); int size = sc1.nextInt(); int num[]=new int [size]; System.out.println("请输入数字:"); for(int i=0;i<size;i++) { num[i]=sc1.nextInt(); } max=num[0]; a=num[0]; for(int i=1;i<size;i++) { if(max+num[i]>=num[i]) { if(num[i]<0&&a<max+num[i]) a=max; max=max+num[i]; } else max=num[i]; } if(a>max) max=a; System.out.print(max); } }
结果截图
:
总结:
最开始看到题目的时候想的是两个for循环嵌套着做,但是题目要求复杂度为n,在老师的提示下想到这个方法,写程序之前要多思考这样才能设计出简便又节省空间的程序,对于之前学习的数据结构应该好好融会贯通。