我正在寻找一种更有效的蛮力替代方法,以找到具有非负数和的数组中最长的子数组。该数组中数字的范围是-5到5。
例如,如果您有一个数组A
:
4 2 -5 3 0 -2 -2 -3 4 -4 -3 -2 1
那么最长的非负子数组是
4 2 -5 3 0 -2 -2 -3 4,长度为9
我正在考虑的解决方案是保持最佳解决方案和最佳后缀,其中最佳后缀始终以最后检查的点结束A[i]
。如果最佳后缀比最佳解决方案要长,我们会将最佳解决方案更新为最佳后缀。
后缀将由夹在两个正子阵列之间的负子阵列组成。因此,在这种情况下,从左到右开始:
4 2是第一正子阵列-5是负子阵列3 0 -2是第二正子阵列
然后程序检查两个正子数组的和是否大于负子数组。如果是这样,则整个最佳后缀将成为新的第一个正子数组。如果不是,则转储第一个正子数组和负子数组,而第二个正子数组变为第一个子数组,依此类推。
从理论上讲,程序应该能够逐步检查线性时间的最佳解决方案。
但是这个答案似乎是不正确的。
因此,我正在为此寻求更好的解决方案,或者至少暗示了一个更好的方向
任何帮助,将不胜感激!
这称为“最长偏差间隔”,是生物学中的常见问题。这是算法(在您的情况下L==0
):
Input: A nonempty array of n real numbers `A[1 . . . n]` and a lower bound `L`.
Output: The start and end index of the longest segment of `A` with sum at least `L`.
C[0 . . . n] and M[0 . . . n] are arrays of size n +1, as defined in the context.
M[0]←C[0]←0; x←y←0;
for i←1 to n do
C[i]←C[i −1] + A[i];
if C[i −1]<C[M[i −1]] then M[i]←i −1 else M[i] = M[i −1];
k←i −y +x − 1;
while k >0 do
if C[i] − C[M[k]] >= L then k←M[k] else break;
x←k +1; y←i;
end while
OUTPUT A(x, y);
end for
参见Chen,Kuan-Yu和Kun-Mao Chao。“用于找到满足总和或平均约束的最长和最短段的最佳算法。”
信息处理快报96.6(2005):197-201。
这是概念的说明:
解决此问题的最佳方法(性能方面)是什么?有人建议我使用后缀树。这是最好的方法吗?
摘自https://algs4.cs.princeton.edu/53substring/ 15.最长回文子串。给定一个字符串s,找出回文(或Watson-crick回文)中最长的子字符串。 解决方案:可以在线性时间内使用后缀树或Manacher算法解决。这里有一个更简单的解决方案,通常在线性时间内运行。首先,我们描述了如何在线性时间内找到所有长度为L的回文子串:使用Karp-Rabin迭代形成每
给定一个由N个正整数组成的数组,从索引0到N-1,我如何才能找到一个长度为K且范围尽可能小的连续子数组。换句话说,最大(子阵列)-最小(子阵列)是最小化的。如果有多个答案,任何答案都可以。 例如,从[4,1,2,6]中找到最小范围的长度为2的子数组 答案是[1,2],因为2-1=1给出了所有可能的连续子数组的最小范围。 其他子阵列有[4,1](范围3),[2,6](范围4) 我正在使用python
本文向大家介绍Python实现针对给定字符串寻找最长非重复子串的方法,包括了Python实现针对给定字符串寻找最长非重复子串的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python实现针对给定字符串寻找最长非重复子串的方法。分享给大家供大家参考,具体如下: 问题: 给定一个字符串,寻找其中最长的重复子序列,如果字符串是单个字符组成的话如“aaaaaaaaaaaaa”那么满足要求的
假设我们有一个数组 {7, 3, 7, 3, 1, 3, 4, 1}。我需要的是一个算法(最好是一些 C 代码示例),它将返回包含数组所有元素的最小子数组的长度。 在这种情况下,它将是 5:{7, 3, 1, 3, 4},这是原始数组的最短子数组,其中包含数组的所有元素,即 1、3、4 和 7。 此外,数组 {2, 1, 1, 3, 2, 1, 1, 3} 的另一个示例,算法应返回 3,因为我们正
给定一个数组< code>a[0..< code>0之间的整数的N-1] 例: 输入 预期输出:
编写一个方法,该方法采用一个整数数组,并返回其最长的具有不同整数的子数组的长度。 例如,对于 [1,2,3,4,,它应该返回 。
给定一个整数数组,包含不超过两个不同值的最长子数组的长度是多少,使得非重复值的差异不超过 1? 例: 最大的子数组长度为4:[1,2,1,2]。 最大的子阵列具有长度4:[3,3,2,2]。值1和3相差1以上,因此[1,1,1,3,3]无效。