【发布时间】:2019-09-11 03:26:51
【问题描述】:
这是一道算法题:
输入是一个具有非重复正整数的数组。找到一个中值最大的连续子数组(size > 1)。
例子:输入:[100, 1, 99, 2, 1000],输出应该是(1000 + 2) / 2 = 501的结果
我可以提出蛮力解决方案:尝试从 2 到数组大小的所有长度以找到最大中位数。但似乎太慢了。我也尝试在这个问题上使用两个指针,但不确定何时移动左右指针。
谁有更好的办法来解决这个问题?
【问题讨论】:
-
你能举个例子吗?据我了解,取一个包含最大元素的长度为 2 的子数组就足够了,但它可能比我想象的要复杂。
-
用蛮力算法做一些测试,似乎总是2或3的数组,不一定包含最大元素。但也可能有一些例外... 示例:Array = [4, 5, 6, 1, 9, 2, 3, 8, 0, 7],最大中位数子数组:[8, 0, 7],中位数: 7.
-
@Gilles-PhilippePaillé。刚刚添加了一个例子。你发现的东西真的很有趣。我还没有实现暴力破解,但是我尝试了很多例子,看起来大小总是小于 3。不确定是否有办法证明这一点?
-
要明确一点,您要查找的是 median 还是 mean 值?问题提到“中位数”,但示例是计算出的“平均值”。
-
@Anders:给定两个数字,它们的平均值和中位数总是一致的。