程序设计思想:
思路:
因为时间复杂度为O(n),则只能遍历一次数组
这里同时使用两个变量sum和max,其中sum保存的是当前的和,若sum<0
则从下一个位置从新记录,max记录的是历史的最大值
只有当sum>max时用sum替换max。
出现的问题:
在初始化max和sum的值时,把max初始化成了0,sum的值初始化成了数组的而第一个元素的值。
可能的解决方法:
应该把max的值初始化成数组的第一个元素的值,把sum的值初始化成0;
源代码:
public class IntArrayMax { public static void MaxIntArray(int[] intArray) { int sum=0; int max=intArray[0]; for(int i=0;i<intArray.length;i++){ if(sum>=0){ sum+=intArray[i]; }else{ sum=intArray[i]; } if(sum>max){ max=sum; } } System.out.println("子数组中的最大值:"+max); } }
public class Invoke { public static void main(String[] args) { // TODO 自动生成的方法存根 Random random=new Random(); //int num=random.nextInt(10); int[] intArray=new int[10]; System.out.print("随机数组:"); for(int i=0;i<intArray.length;i++){ intArray[i]=random.nextInt(10)-5; System.out.print(intArray[i]+" "); } System.out.print("\n"); IntArrayMax intArrayMax=new IntArrayMax(); intArrayMax.MaxIntArray(intArray); } }
结果截图:
总结:
编程前应该先分析清楚题的意思,然后想好思路,进行编程。