我有一系列代表海拔高度的整数,我需要找出有多少高度可以看到西边的地平线(阵列是从西向东组织的)。看到地平线的要求高于最后的n / 5高度,其中n是阵列的长度。
这对于两个for循环来说很容易,但我必须在O(n)中完成。所以我只能迭代一次数组。我不需要解决方案,只需向正确的方向努力。
答案 0 :(得分:1)
通过阵列向后工作怎么样?从最后开始,创建一个你通过的每个高度的队列。如果您看到高于当前高度的高度,那么队列中的任何高度都不能看到地平线(因此您可以将它们扔出去)。如果你得到n / 5,那么队列中的最后一个高度可以看到地平线(显然,你需要处理队列中超过n / 5个元素的情况)。
答案 1 :(得分:0)
答案 2 :(得分:0)
如果尺寸= n / 5的滑动窗口中的最大高度,海拔高度将能够看到地平线。
“滑动(移动)窗口中的最大值”问题具有O(n)复杂度。可以在SO和互联网上找到它的解决方案。
提示:使用简单的数据结构 - 队列或堆栈