【发布时间】:2013-04-12 08:03:41
【问题描述】:
给定一个未排序的正整数数组,求排序后元素连续的最长子数组的长度。你能想到一个 O(n) 的解决方案吗?
例子:
{10, 5, 3, 1, 4, 2, 8, 7},答案是 5。
{4, 5, 1, 5, 7, 6, 8, 4, 1},答案是 5。
对于第一个例子,子数组 {5, 3, 1, 4, 2} 排序后可以形成一个最长的连续序列 1,2,3,4,5。
对于第二个示例,子数组 {5, 7, 6, 8, 4} 是结果子数组。
我可以想到一种方法,对于每个子数组,检查 (maximum - minimum + 1) 是否等于该子数组的长度,如果为真,则它是一个连续子数组。取最长的。但它是O(n^2),不能处理重复。
谁能给出更好的方法?
【问题讨论】:
-
你可以修改数组吗?还有多少可用空间?
-
数组中整数的取值有什么限制?如果没有,我敢打赌:在复杂性低于
O(n*log(n))的情况下是不可能做到的 -
允许对重复进行哪些假设?假设每个整数最多出现一次是否安全?
-
你能定义“子数组”吗?它必须在原始数组中是连续的吗?
-
@Shedal 我认为它必须是连续的,正如示例中所建议的那样,带有重复项
标签: algorithm