第一次课堂练习-第一部分
1.主要思路:
难点在于时间复杂度控制在O(n),借鉴了很多同学的思路和网上的资料。
2.源代码:
import java.util.Scanner; /** * @author migua * @version 1.0 * @date 2022/3/11 9:44 */ public class aa { public static void main(String[] args) { System.out.println("数组长度"); Scanner sc = new Scanner(System.in); int l = sc.nextInt(); int[] arrNum = new int[l]; System.out.println("数组的值"); for (int i = 0; i < l; i++) { int x = sc.nextInt(); if(x < 2147483647 || x > -2147483648 ) arrNum[i] = x; else { System.out.println("数据输入超界,程序已退出"); return; } //System.out.println(arrNum[i]); } int[] arrRes = new int[l]; for(int i = 0;i<arrNum.length;i++) { arrRes[i]=0; } int i = 0,j=0; int max = 0; for (i = 0; i < l; i++) { //j为当前子数组的开头下标 if(i == 0) { arrRes[i]=arrNum[0]; //System.out.println("初始arrRes值为:" + arrRes[i]); } else if(i > 0) { int pre = arrRes[i - 1]; int now = arrNum[i] + arrRes[i - 1]; if(pre < 0) { arrRes[i]=arrNum[i]; } else if (pre < now) { arrRes[i] = now; //System.out.println("arrRes[i]" + arrRes[i]); } else { j=i; arrRes[i] = arrNum[i]; } } } max=arrRes[0]; for( i = 0;i <arrRes.length;i++) { if(arrRes[i]>max && arrRes[i] <2147483647) max=arrRes[i]; else if(arrRes[i] >= 2147483647 || arrRes[i] < -2147483648) { System.out.println("数据溢出,程序已退出"); return ; } } System.out.println(max); } }
3.运行结果: