【发布时间】:2016-12-29 06:39:18
【问题描述】:
例如, 我们有
{2,2,-1},
when k = 0, return -1.
when k = 3, return 3.
这甚至很棘手,因为我们有负数和一个附加变量 k。 k可以是任何值,负数,不要做任何假设。
我无法参考https://en.wikipedia.org/wiki/Maximum_subarray_problem 和https://www.youtube.com/watch?v=yCQN096CwWM 来解决这个问题。
任何人都可以帮助我吗?最好使用 Java 或 JavaScript。
这是一个经典算法 o(n) 求最大值(无变量 k):
public int maxSubArray(int[] nums) {
int max = nums[0];
int tsum = nums[0];
for(int i=1;i<nums.length;i++){
tsum = Math.max(tsum+nums[i],nums[i]);
max = Math.max(max,tsum);
}
return max;
}
【问题讨论】:
-
任何复杂性要求?
-
没有要求了,能解决吗?
-
什么值不能大于k?子数组的长度还是子数组的总和?测试 [1, 2, 3] 的答案,k = 2 是 5 还是 2?
-
如标题,连续子数组的最大和不大于k。
标签: algorithm queue dynamic-programming binary-search kadanes-algorithm