考虑一个由 N 个整数组成的数组。找到最长的连续子数组,使其元素的平均值大于(或等于)给定数字 k。
显而易见的答案具有O(n^2)复杂度。我们能做得更好吗?
我们可以在O(n)时间和O(n)空间复杂度下解决问题:
我已经尝试了朴素和最优的方法。
简而言之,这个问题涉及两个步骤:
(1)从每个ar[i]中减去k,并在新数组中找到累加值。让我们将新数组称为CumArr[]。
(2)现在问题变成了在CumArr[]中找到max(j-1)使得j
下面是运行代码的详细信息:http://codeshare.io/Y1Xc8
可能会有一些小的角落案件可以很容易地处理。
朋友们,让我知道你的想法。
我们可以将这个问题简化为最长的连续子数组,总和
index 0 1 2 3 4 5 6
array 2 -3 3 2 0 -1
prefix 0 2 -1 2 5 5 4
现在的问题是用prefix_right-prefix_left找到相距最远的两个索引
index 2 0 1 3 6 4 5
prefix -1 0 2 2 4 5 5
然后,我们可以进行从右到左的扫描,为每个前缀计算前缀大于或等于当前前缀的最大索引:
index 2 0 1 3 6 4 5
prefix -1 0 2 2 4 5 5
maxind 6 6 6 6 6 5 5
现在,让我们回到原来的前缀数组。对于每个前缀-索引对,我们在新的数组上做一个二分搜索法来找到最小的前缀
由于排序和n次二进制搜索,该算法是O(n log n)。
我想找到给定正整数数组中元素的最大数目,使得它们的和小于或等于给定的k。例如,我有一个数组 答案是3,因为1,2,3是求和6的最大元素。
如何加快以下问题陈述的执行速度?我有一个正确的解决方案,通过每一个测试的小输入。但是,它超过了较大输入的时间限制。我当前的实现是数组大小的二次型。 你的答案应该是基于1的,这意味着数组的第一个位置是1而不是0。 实施
我知道一个O(n2)soln,它能以更好的方式实现吗,因为数组中元素的数量限制非常大
今天我注意到这个node.js代码: 给出输出 这很奇怪;如果某物不等于0或大于0,那么它为什么大于或等于0呢?发生什么事了?
本文向大家介绍LCM的最大长度子数组等于C ++中的乘积,包括了LCM的最大长度子数组等于C ++中的乘积的使用技巧和注意事项,需要的朋友参考一下 假设我们有一个数组A。我们必须找到子数组的最大长度,它的LCM与该子数组元素的乘积相同。如果找不到这种子数组,则返回-1。假设数组为{6,10,21},则长度为2,因为在那里有子数组{10,21},其LCM为210,乘积也为210。 该方法是直接的。我
问题内容: 我在PostgreSQL中有一个名为的关系,该关系包含2个字段:和,我想找到具有最高值的产品。据我所知,有两种方法可以做到: 或者 他们的执行速度有什么不同吗? 问题答案: 如果有任何行,第一个查询将失败(如Gordon所示)。 仅当所有行都具有时,第二个查询才会失败。因此,它在大多数情况下应该是可用的。(而且速度更快。) 如果在 Postgres 12或更早版本中 需要NULL安全查