我有一个数组,类似于[1,3,5]。对于这些元素中的每一个,我都需要找到当前元素最高的最长子数组。答案是所有子数组的长度之和。
最终答案=1+2+3=6[单个子数组的长度]
对于这个问题,我可以给出一个强力O(N^2)。有没有更好的办法来解决这个问题?
我给你两个提示。
提示1:时间复杂度和空间复杂度O(n)
的解决方案是可能的。n
是给定数组arr
中的元素数。dynamic-programming
标记会导致头脑固守它,而不是探索其他可能的解决方案。
现在就停在这里,在进一步阅读之前,你自己试试。
有意的空白,避免让你无意中读到第二个提示
.
.
Index: 0 1 2 3 4 5
Arr: 44 91 58 54 7 38
长度之和=17。所以,我们有一个正确的解决方案。
后续问题:如果arr
中存在重复项,上述解决方案是否有效?如果没有,你会对上面的算法做什么改变来使其工作?提示:玩>
、<
、=
会有帮助吗?
给定一个整数N和一个长度为N的数组,该数组由0到N-1的整数组成,可能包含也可能不包含所有整数,也可能包含重复数。查找一个从索引i到索引j的子数组(i, j),使其包含数组中的所有整数,并且具有最小长度。输出是这样一个子数组的长度 示例:A=[2,1,1,3,2,1,1,3],因此最小子数组长度=3,因为A[2]到A[4]包含所有数字 我的想法: 维护一个计数器数组和两个索引开始和结束,其中包含数
O(n^2)算法简单。有没有人对此有更好的算法?
子数组包含正数和负数。你必须找到一个最大和子数组,使子数组的长度大于或等于k。 下面是我用C++编写的使用Kadane算法的代码。 我的代码工作得很好,但很慢,我想不出任何方法来改进我的代码。我也读过这个问题,找到最长的子数组,它的和可以被K整除,但这不是我想要的,长度也可以大于K。
我有一个数组[1,2,3],总和为4。所以所有的连续子数组都是 [1],[1,2][2,3] 和 [1,2,3]。因此,小于或等于总和的最大长度子数组为 [1,2],长度为 2。 我用下面的方法找到了所有的子数组,并检查了子数组的和,如下所示。但是这种方法不适用于负数。{1,2,1,1,3,-2,-3,7,9};答:7
我有这个问题: 您将获得一个整数 A 和一个整数 k 的数组。您可以将 A 的元素递减到 k 次,目标是生成一个元素都相等的连续子数组。返回可以用这种方式生成的最长的连续子数组的长度。 例如,如果 A 是 [1,7,3,4,6,5] 并且 k 是 6,那么您可以生成 [1,7,3,4-1,6-1-1-1,5-1-1] = [1,7,3,3,3,3],因此您将返回 4。 最佳解决方案是什么?
有没有一种方法可以在小于O(n^2)的时间内做到这一点。 O(nlogn)还是O(n)?