找到数组的第一个最小窗口

时间:2011-04-10 16:05:59

标签: arrays algorithm

给定整数数组,窗口[a,b]由a和b之间的数组元素组成,窗口的大小为b-a。现在你应该找到第一个最小的窗口,其间有N / 2个元素(N是数组的大小,b大于a)。
例如{5,-3,10,12,-2,-5},我们得到答案[-5,-2]。

2 个答案:

答案 0 :(得分:2)

如果我理解得很清楚,你必须找到第一个长度为N / 2的窗口,它的总和最小。

您可以通过尝试所有可能的窗口来实现这一目标,并保持迄今为止找到的最小窗口。如果您以巧妙的方式执行此操作,则可以使用O(N)复杂度算法。因为它似乎是一个家庭作业,我会让你自己弄明白;)

答案 1 :(得分:0)

一种解决方案:
一个。找出N(在O(N)时间内)
湾遍历数组并为每个元素x i 在散列/映射中查找N / 2 - x i 。如果找到你的解决方案,否则在散列/映射中插入N / 2 - x i (如果使用散列则为O(n)时间,如果使用地图则为O(nlogn)和O(n)空间)。