题目描述:
HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?
例如:
分析:
这题考察动态规划,只需要O(n)时间复杂度即可。其推导公式如下:f(i) = array[i] i = 0f(i) = f(i - 1) + array[i] i > 0i的取值范围:0<= i < n1、判断当前的数值与之前遍历的累加最大值进行比较,并取两者最大2、根据1得到的结果与之前记录的最大值进行比较,取两者最大值
代码:
public class Solution { public int FindGreatestSumOfSubArray(int[] array) { int length = array.length; // 假设最大值是第一个 int max = array[0]; for (int i = 0, sum = 0; i < length; ++i) { // 取当前值与累加的值两者最大值 sum = Math.max(array[i], array[i] + sum); // 更新最大值 max = Math.max(max, sum); } return max; }}