【发布时间】:2016-05-25 21:47:18
【问题描述】:
我遇到了一个问题,我想编写一个算法,该算法可以返回更大数组中每个连续的 k 个元素的子数组的最大元素,并将这些最大元素读入它们自己的数组,如下所示:
Given int array = {3, 7, 20, 6, 12, 2, 0, 99, 5, 16}, and int k = 4,
--> creates the array {20, 20, 20, 12, 99, 99, 99}
[because there are 7 consecutive sub-arrays of size 4 within the given array:
{3, 7, 20, 6}, {7, 20, 6, 12}, {20, 6, 12, 2}, ... , {0, 99, 5, 16}
and the max element of these, respectively, is 20, 20, 20, ..., 99 which
are read into the resulting array.
现在这是我的问题:我知道如何在 O(n^2) 复杂度中实现这一点,但希望让它更快,以便它可以是 O(n),或者如果那是不可能,O(nlog(n))。有谁知道是否有更快的方法来做到这一点,如果有,怎么做?
【问题讨论】:
-
*连续子数组。对不起,我忘了提这个
-
我不认为你可以在执行复杂性方面提高效率,除非你有某种形式的启发式。如果这些数据结构是树,您可以使用高级截断算法,例如 alpha-beta 剪枝。所以不幸的是,我认为你只能使用递归使它更优雅,而你却被
O(n^2) -
你不是说 O(nk) 复杂度而不是 O(n^2) 吗?天真的方法似乎是扫描每个子数组中的 k 个元素并选择最大的。
标签: c++ arrays algorithm max sub-array