繁体   English   中英

如何在给定数组中的任何子数组(任何大小)中找到最大值(或最小值)?

[英]How to find maximum(or minimum) in any subarray(of any size) in a given array?

我们得到一个数组和一些查询。 每个查询包含两个数字ij 我们需要在给定数组中从索引i开始到索引j结束的子数组中找到最大(或最小)元素。

例如。

arr = [2 , 3 , 5,  8 , 4 , 9]

query 1: (2 , 4)

与此查询对应的子数组将是[5 , 8 , 4] 因此,最大值将为8

注意:查询次数约为 10^5,数组中约有 10^6 个元素。 程序执行的时间限制也是 1s 。 所以,我想需要一个解决方案,每个查询的复杂度为 O(log n) 或更少,其中 n 是数组中的元素数。

给我们一个数组和一些查询。 每个查询包含两个数字ij 我们需要在子数组中找到从索引i开始到给定数组中的索引j结束的最大(或最小)元素。

例如

arr = [2 , 3 , 5,  8 , 4 , 9]

query 1: (2 , 4)

与此查询对应的子数组将为[5 , 8 , 4] 5,8,4 [5 , 8 , 4] 因此,最大值为8

注意:查询数约为10 ^ 5,数组中约有10 ^ 6个元素。 程序执行的时间限制也为1s。 因此,我猜想需要一个解决方案,该解决方案每个查询的复杂度为O(log n)或更小,其中n是数组中元素的数量。

给我们一个数组和一些查询。 每个查询包含两个数字ij 我们需要在子数组中找到从索引i开始到给定数组中的索引j结束的最大(或最小)元素。

例如

arr = [2 , 3 , 5,  8 , 4 , 9]

query 1: (2 , 4)

与此查询对应的子数组将为[5 , 8 , 4] 5,8,4 [5 , 8 , 4] 因此,最大值为8

注意:查询数约为10 ^ 5,数组中约有10 ^ 6个元素。 程序执行的时间限制也为1s。 因此,我猜想需要一个解决方案,该解决方案每个查询的复杂度为O(log n)或更小,其中n是数组中元素的数量。

给我们一个数组和一些查询。 每个查询包含两个数字ij 我们需要在子数组中找到从索引i开始到给定数组中的索引j结束的最大(或最小)元素。

例如

arr = [2 , 3 , 5,  8 , 4 , 9]

query 1: (2 , 4)

与此查询对应的子数组将为[5 , 8 , 4] 5,8,4 [5 , 8 , 4] 因此,最大值为8

注意:查询数约为10 ^ 5,数组中约有10 ^ 6个元素。 程序执行的时间限制也为1s。 因此,我猜想需要一个解决方案,该解决方案每个查询的复杂度为O(log n)或更小,其中n是数组中元素的数量。

给我们一个数组和一些查询。 每个查询包含两个数字ij 我们需要在子数组中找到从索引i开始到给定数组中的索引j结束的最大(或最小)元素。

例如

arr = [2 , 3 , 5,  8 , 4 , 9]

query 1: (2 , 4)

与此查询对应的子数组将为[5 , 8 , 4] 5,8,4 [5 , 8 , 4] 因此,最大值为8

注意:查询数约为10 ^ 5,数组中约有10 ^ 6个元素。 程序执行的时间限制也为1s。 因此,我猜想需要一个解决方案,该解决方案每个查询的复杂度为O(log n)或更小,其中n是数组中元素的数量。

给我们一个数组和一些查询。 每个查询包含两个数字ij 我们需要在子数组中找到从索引i开始到给定数组中的索引j结束的最大(或最小)元素。

例如

arr = [2 , 3 , 5,  8 , 4 , 9]

query 1: (2 , 4)

与此查询对应的子数组将为[5 , 8 , 4] 5,8,4 [5 , 8 , 4] 因此,最大值为8

注意:查询数约为10 ^ 5,数组中约有10 ^ 6个元素。 程序执行的时间限制也为1s。 因此,我猜想需要一个解决方案,该解决方案每个查询的复杂度为O(log n)或更小,其中n是数组中元素的数量。

使用两个修改过的堆栈或队列,可以在O(n)时间复杂度下实现

解决方案: https : //cp-algorithms.com/data_structures/stack_queue_modification.html解决方案: https : //www.geeksforgeeks.org/sliding-window-maximum-maximum-of-all-subarrays-of-size-k /

我能想到的最简单的方法是将数组存储为平衡搜索树,该树存储每个节点下的最小值,以便每个索引都映射到其值。

然后你可以按j分割,按i分割(平衡树保持当前节点子树的最小值),并返回根min。 然后把你得到的(最多)3 棵树连起来。

构造是 O(n log n),查询是 O(log n) [因为拆分和连接是在 O(log n) 中完成的]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM