当前位置: 首页 > 知识库问答 >
问题:

子阵求和

南宫龙野
2023-03-14

我最近遇到了一个两个指针的子数组求和问题的解决方案,我不太确定算法的正确性。子数组求和问题包括寻找一个和等于某个目标值的子数组。我见过使用哈希表解决这个问题的方法,但我质疑另一个解决方案的正确性。让我给你们一个算法的例子。

假设有一个数组[1,3,2,5,1,1,2,3],目标值x=8。

使用指示子数组开始和结束的左指针和右指针。在每一步中,左指针向前移动一步,右指针向前移动,只要子数组和至多为x。以上数组的算法将以这种方式进行。

[1,3,2,5,1,1,2,3]
l    r

[1,3,2,5,1,1,2,3] ##The right pointer doesn't move because the next element would make the sum larger than x
   l r

[1,3,2,5,1,1,2,3]
     l   r

共有1个答案

郎子平
2023-03-14

设LEN(i)是从索引i开始,和至多为X的最长子数组的长度

如果有一个子数组的和X从索引i开始,那么LEN(i)将是这样一个子数组的长度(可能有多个数组尾随0)。因为数组中只有正整数,所以从i开始的所有较长数组的和都较大,而所有较短的数组的和都相等或较小。

所以我们所需要做的就是找到每个索引的LEN(i)和相应子数组的和。如果其中一个和是X,那么你就有了答案。

 类似资料:
  • 问题陈述如下: 当帖子说解决方案对负数不起作用时,它指的是哪些输入情况?

  • 我陷入了一个问题,即寻找一个xor为0的子数组。我在某个地方读到,这可以使用TRIE数据结构来完成,但我想要数组的开始和结束索引。 例如,考虑一个数组 我尝试了这里提到的解决方案,但这没有给出索引。 我正在寻找一个O(nLogn)或可能O(n)复杂度的算法。

  • 我在Leetcode上遇到了这个问题,我看到了解决方案,但我无法理解它为什么工作。它适用于模数的什么性质?我们怎么能说我们已经找到了一个和等于k的子数组,只看前面的模结果呢? 问题:

  • 我试图通过DP找到所有子数组的加权平均值,然后按列排序,找到长度相同的2。但我无法继续下去,我的方法似乎太模糊/太粗暴了。我将非常感谢任何帮助。提前谢了。

  • 我目前正在做一个音频信号处理项目,需要在Java中的一个复杂矩阵上使用SVD。我当前的线性代数库是Apache Commons。但它只提供实矩阵的SVD,JAMA、JBLAS、EJML、ojAlgo都不支持复杂的SVD。 我一直在用一些技巧从一个等效的实矩阵中找到SVD。然而,当我重建矩阵时,这种技术对于虚部有很大的不准确性。

  • 问题内容: 我正在尝试编写一种算法,用于在给定的子矩阵中查找子矩阵。为了解决这个问题,我编写了以下代码: 这段代码可以正常工作,但是我不确定这是问题的确切解决方案还是可以解决。请提供您的专家意见。提前致谢。 问题答案: 该算法对4×4矩阵和2×2子矩阵进行了硬编码。否则,它看起来像蛮力算法。 我会这样表示: 如果您想要更有效的方法,建议您将它们压扁,如下所示: 并在此序列中搜索以下模式: 使用标准