Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.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
C 在数组中查找最大值_C_Algorithm - Fatal编程技术网

C 在数组中查找最大值

C 在数组中查找最大值,c,algorithm,C,Algorithm,在一个数组中输入一千(1000)个元素(无内存限制)。正如我们所知,在输入元素时,只要输入值,我们就可以通过检查来更新输入值的最大值 但是想象一下,如果最大值的位置在900左右 如果我从位置800到1000移除200个元素, 不做任何比较,我们应该有下一个最大值。 这是否意味着在输入数据时,我们应该有一个计划,以某种方式组织数据,以从剩余数据中获取最大值 删除和插入将继续发生,但我们应该用更少的步骤在更短的时间内更新最大值。(使用堆栈可能会有所帮助,这是面试官给我的线索)。任何人都可以帮助我 在

在一个数组中输入一千(1000)个元素(无内存限制)。正如我们所知,在输入元素时,只要输入值,我们就可以通过检查来更新输入值的最大值

但是想象一下,如果最大值的位置在900左右

如果我从位置800到1000移除200个元素, 不做任何比较,我们应该有下一个最大值。 这是否意味着在输入数据时,我们应该有一个计划,以某种方式组织数据,以从剩余数据中获取最大值


删除和插入将继续发生,但我们应该用更少的步骤在更短的时间内更新最大值。(使用堆栈可能会有所帮助,这是面试官给我的线索)。任何人都可以帮助我

在您的情况下,最大堆可能有效。但由于1000非常小,您可能不需要复杂的东西。

在数组上创建树结构。在每个节点中保持子树的范围和最大值。删除/插入时,从下到上更新受影响节点中的最大值。

应使用
max heap
数据结构。
max heap
的属性是,您可以在
O(1)
时间中获得最大值。而每次插入和删除都需要
O(log(n))
时间。
有关更多信息,请检查

使用二进制最大堆!这是一个奇怪的类似于缩小版的。主要区别在于,另一个问题是处理1千万(1000万)个元素,并删除其中的2000万(200万)个元素。我们是否可以假设只允许在数组末尾进行删除/添加,或者您是否可以(例如)从1000个数组中删除850到950个元素?假设您已经按顺序读取了1000个元素(数字0..999)并删除元素700-899。读取为900-999的元素现在是否编号为700-799?如果编号为1000+或800+,是否仍在添加新元素?(也就是说,您是将接下来的100个元素标识为1000..1099,因为这是它们在源数据中的“记录编号”,还是将它们标识为800..899,因为它们在数组中的位置?)JonathanLeffler元素一旦在中间删除某个元素就会被移动。索引900-99中的元素将被移到700到799。这1000个可以到1个CRORE。请你解释一下如何使用最大堆。我对计算机科学是新的。我很好奇你如何处理来自InP的一系列值的大量删除。ut序列。@RajaSekharReddy让我们说清楚。删除和插入只发生在数组的末尾?@XiaotianPei不仅发生在数组的末尾,它可以从任何位置发生到任何位置。完全删除也可以发生。