javaScript连续子数组的最大和

1,968 阅读1分钟

输入一个整型数组,子数组为这个数组中连续的一个或者多个整数组成的数组。求所有子数组中的和的最大值。要求时间复杂度为O(n)。例如,输入数组为[1, -3, 9, 10, -2, 3, -6, 5]。和最大的子数组为 [9, 10, -2, 3],因此输出为该子数组的和20。


function contMax(array) {
	if (array.length == 0)
		return 0
	var sum = array[0] //保存每组的和
	var maxSum = array[0] //连续子数组最大和
	for (var i = 1; i < array.length; i++) {
		sum = Math.max(sum + array[i], array[i]);
		maxSum = Math.max(sum, maxSum)
	}
	return maxSum
}

console.log(contMax([1, -3, 9, 10, -2, 3, -6, 5])) //20