第一次课堂练习-第一部分
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.运行结果:


浙公网安备 33010602011771号