Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在数组中查找彼此之间一定距离内的最高值_Java_Algorithm_Big O - Fatal编程技术网

Java 在数组中查找彼此之间一定距离内的最高值

Java 在数组中查找彼此之间一定距离内的最高值,java,algorithm,big-o,Java,Algorithm,Big O,我有一个代表高度的整数数组,我需要找出其中有多少个高度能够看到向西的地平线(数组是从西到东排列的)。观察地平线的要求高于最后的n/5高度,其中n是阵列的长度 使用两个for循环很容易,但我必须在O(n)中完成。所以我只能在数组上迭代一次。我不需要解决办法,只要朝着正确的方向努力就行了 你真的应该读这篇 如何通过阵列反向工作?从终点开始,为您经过的每个高度创建一个队列。如果您看到的高度大于当前高度,那么队列中的任何高度都看不到地平线(因此您可以将其抛出)。如果您到达n/5,那么队列中的最后一个高度

我有一个代表高度的整数数组,我需要找出其中有多少个高度能够看到向西的地平线(数组是从西到东排列的)。观察地平线的要求高于最后的n/5高度,其中n是阵列的长度


使用两个for循环很容易,但我必须在O(n)中完成。所以我只能在数组上迭代一次。我不需要解决办法,只要朝着正确的方向努力就行了

你真的应该读这篇

如何通过阵列反向工作?从终点开始,为您经过的每个高度创建一个队列。如果您看到的高度大于当前高度,那么队列中的任何高度都看不到地平线(因此您可以将其抛出)。如果您到达n/5,那么队列中的最后一个高度可以看到地平线(显然,您需要处理队列中超过n/5个元素的情况)。

如果高度是大小为n/5的滑动窗口中的最大高度,则可以看到地平线

“滑动(移动)窗口中的最大值”问题具有O(n)复杂性。在SO和互联网上都可以找到它的解决方案


提示:使用简单的数据结构-队列或堆栈

两个循环是O(n),只要它们不是嵌套的!事实上,任何数量不变的(简单的,非嵌套的)循环,例如10000000,仍然是O(n)为您当前的解决方案发布伪代码。如果您将箭头循环两次,它是O(2n)==O(n)@ChristianJonassen-听起来他们好像不知道如何开始。@scibuff-是的,但明显的解决方案(我认为krispy指的是)将是向前一个循环,嵌套循环向后n/5个值,以查找要比较的值。这个解决方案是O(n*n/5)=O(n^2)。我不能使用数据结构,但我使用两个游标实现了相同的结果。谢谢你的帮助。