题目:
代码形式:
import java.util.Scanner;
public class maxarray1{
public static int maxSubArray(int[] nums) {
int pre = 0, maxAns = nums[0];
for (int x : nums) {
pre = Math.max(pre + x, x); //@1
maxAns = Math.max(maxAns, pre); //@2
}
return maxAns;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
String[] split = s.split(",");
int[] nums = new int[split.length];
for (int i = 0; i<split.length; i++) {
nums[i] = Integer.parseInt(split[i]);
}
System.out.println(maxSubArray(nums));
}
}
1.scanner.nextline()与scanner.next()区别:
next是以Tab键,空格键,回车键为结束符
nextline是以回车键为结束符
2.split()的作用:
split(“A”),A为任意字符,可以将一个字符串通过以A为分隔符的分段字符串(一般都会放在字符串数组当中)
3.integer
integer是int的包装类,int是基本数据类型
integer.parseint(A[B])作用为将字符串数组A中的所有字符串变成带符号的十进制数
4.int x : nums:
变量x遍历nums这个数组,也就是从nums[0]一直到nums[n]的全部数
5.实现思路:
图中@1行代码表示:
当前数组元素跟前面的求得的最大值进行比较,如果当前数组元素为最大值则将pre更新为当前值
图中@2行代码表示:
当前的pre储存在manAns当中,并且manAns一直储存的历史最大的pre的数值
此题目算法作者并无完全理解,如有错误希望大家帮忙指出