package pers.lyt.java;
//题目
// 输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整/数组成一个子数组。
//求所有子数组的和的最大值。要求时间复杂度为O(n)。
//思路
// 分析规律,从第一个数字开始累加,若走到某一个数字时,前面的累加和为负数,说明不能
//继续累加了,要从当前数字重新开始累加。在累加过程中,将每次累加和的最大值记录下来,
//遍历完成后,返回该数字。
public class Offer42_GreatestSumOfSubarrays {
public int FindGreatestSumOfSubArray(int[] array) {
if (array == null || array.length <= 0) {
return 0;
}
int sum = array[0];
int maxSum = array[0];
for (int i = 1; i < array.length; i++) {
// 1.sum>0继续加
if (sum > 0) {
sum += array[i];
// 2.否则置当前数字给sum
} else {
sum = array[i];
}
// 3.maxSum每次更新最大值
if (sum > maxSum)
maxSum = sum;
}
return maxSum;
}
public static void main(String[] args) {
Offer42_GreatestSumOfSubarrays demo = new Offer42_GreatestSumOfSubarrays();
int sum = demo.FindGreatestSumOfSubArray(new int[]{3,5,-2,-5,7,-4});
System.out.println(sum);
}
}
42_GreatestSumOfSubarrays
最新推荐文章于 2021-07-23 13:31:38 发布