找到最大和连续子数组,使得子数组的长度小于等于 k?

Posted

技术标签:

【中文标题】找到最大和连续子数组,使得子数组的长度小于等于 k?【英文标题】:Find maximum sum contiguous subarray such that the length of the subarray is less than equal to k? 【发布时间】:2016-12-20 11:17:18 【问题描述】:

如果存在两个以上的子数组,我们需要返回长度较小的子数组。

我们只关心子数组的长度及其总和。

我知道这可以使用蛮力在 O(n^2) 中解决,但我正在寻找一种有效的方法来做到这一点。 我也尝试使用滑动窗口概念在 O(n) 中解决这个问题,但后来我意识到它在某些情况下会失败。

如何有效地做到这一点?

【问题讨论】:

也许我是唯一需要这种帮助的读者(或者需要它使我无法回答),但输入数据结构是什么?一组数字?什么是连续子数组? @danh “连续”一词的意思是相邻或相邻。连续子数组的所有元素彼此相邻。就像,对于一个有 10 个元素的数组, a[0], a[1], a[2] 组成一个连续的子数组, a[0], a[2], a[4] 不要 【参考方案1】:

我建议你看看 Kadane 的算法。它从给定数组中找到一个总和最大的连续子数组。它在 O(n) 中这样做。您的问题将长度限制为“k”。所以你只需要在 Kadane's 中检查长度

【讨论】:

以上是关于找到最大和连续子数组,使得子数组的长度小于等于 k?的主要内容,如果未能解决你的问题,请参考以下文章

O(N)求数组中小于等于K的最大子数组长度

如何找到具有最小k长度和最大和的子数组?

算法总结之 未排序数组中累加和小于或等于给定值的最长子数组长度

最大连续子数组(元素数量最多)

java 最大尺寸子阵列和等于k(和为k的最长连续子数组)

未排序数组中累加和小于或等于给定值的最长子数组长度