[英]Given an array and integer k find maximum value in each subarray of size k
[英]How to find maximum(or minimum) in any subarray(of any size) in a given array?
我们得到一个数组和一些查询。 每个查询包含两个数字i
和j
。 我们需要在给定数组中从索引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 是数组中的元素数。
给我们一个数组和一些查询。 每个查询包含两个数字i
和j
。 我们需要在子数组中找到从索引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是数组中元素的数量。
给我们一个数组和一些查询。 每个查询包含两个数字i
和j
。 我们需要在子数组中找到从索引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是数组中元素的数量。
给我们一个数组和一些查询。 每个查询包含两个数字i
和j
。 我们需要在子数组中找到从索引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是数组中元素的数量。
给我们一个数组和一些查询。 每个查询包含两个数字i
和j
。 我们需要在子数组中找到从索引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是数组中元素的数量。
给我们一个数组和一些查询。 每个查询包含两个数字i
和j
。 我们需要在子数组中找到从索引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.