题目:输入一个 非空 整型数组,数组里的数可能为正,也可能为负。 数组中一个或连续的多个整数组成一个子数组。 求所有子数组的和的最大值。 样例 输入:[1, -2, 3, 10, -4, 7, 2, -5] 输出:18
public static void main(String[] args) {
int [] arr=new int[]{1, -2, 3, 10, -4, 7, 2, -5};
int i = seekMaxArray(arr);
System.out.println(i);
}
//思路:将各个子数组累加,比较最大的
private static int seekMaxArray(int[] arr){
int max = arr[0]; // 定义max
int maxl = arr[0]; // 定义maxl
for (int i=1; i<arr.length; i++){
max = Math.max(max + arr[i], arr[i]); //表示以下标为i结束的子数组的累加的最大值(从后往前)
maxl = Math.max(maxl, max); //表示所有子数组累加的最大值
//和以下标为i-1结束的子数组的累加的最大值比较
}
return maxl; // 返回最大值
}
思路:本来的想法是 找出所有的子数组比较 发现时间复杂度过高 这边代码就不放了哈哈哈
新思路:从头开始依次添加一个数组中的数字比较大小,
在比较之前没有添加的大小,层层比较下去。
本文介绍了一种求解非空整型数组中所有子数组和的最大值的算法实现。通过遍历数组并动态更新子数组累加和,比较得出最大值。示例输入为[1,-2,3,10,-4,7,2,-5],输出最大子数组和为18。
1649

被折叠的 条评论
为什么被折叠?



