/*
* 面试题42:连续子数组的最大和
* 题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
* 求所有子数组的和的最大值。要求时间复杂度为O(n)。
* 例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。
* 思路:若和小于0,则将最大和置为当前值,否则计算最大和
*/
public class No42FindGreatestSumOfSubArray {
public static void main(String[] args) {
No42FindGreatestSumOfSubArray n = new No42FindGreatestSumOfSubArray();
int[] array = {1, -2, 3, 10, -4, 7, 2, -5};
System.out.println(n.FindGreatestSumOfSubArray(array));
int[] array2 = {-2, -8, -1, -5, -9};
System.out.println(n.FindGreatestSumOfSubArray(array2));
int[] array3 = {2, 8, 1, 5, 9};
System.out.println(n.FindGreatestSumOfSubArray(array3));
}
public int FindGreatestSumOfSubArray(int[] array) {
if (array == null || array.length == 0) {
return 0;
}
int cur = array[0];
int greast = array[0];
for (int i = 1; i < array.length; i++) {
if (cur < 0) {
cur = array[i];
} else {
cur += array[i];
}
if (cur > greast) {
greast = cur;
}
}
return greast;
}
}
面试题42:连续子数组的最大和
最新推荐文章于 2021-05-30 16:06:02 发布