30:连续子数组的最大和
题目描述
输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n).
问题解析
遍历数组,设定一个max值和变量值,变量值是从前往后遍历添加的 ,若数组为null 则max = 0,一次遍历,若变量值>max 则将变量值赋给max ,若变量小于0,则给该变量重新赋值
代码实现
package com.xu.fingeroffer.thirty;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.ListIterator;
/**
* 给一个数组 ,求该数组中子数组的最大值
*/
public class 连续子数组的最大和30 {
public static void main(String[] args) {
int[] a = {1,-2,3,10,-4,7,2,-5};
System.out.println(FindGreatestSumOfSubArray(a));
}
public static int FindGreatestSumOfSubArray(int[] array) {
if (array.length == 0) {
return 0;
}
LinkedList<Integer> list = new LinkedList<>();
int temp = 0;
int max = array[0];
for (int i = 0; i < array.length; i++) {
temp = temp + array[i];
list.add(array[i]);
if (max < temp) {
max = temp;
}
if (temp < 0) {
temp = 0;
list.clear();
}
}
System.out.println(Arrays.toString(list.toArray()));
return max;
}
}