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

子阵求和

南宫龙野
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。然而,当我重建矩阵时,这种技术对于虚部有很大的不准确性。

  • 在长度为N的数组中求和最大的邻接子数组。 输入格式: 输出格式: 返回一个整数,表示相邻子数组的最大可能和。 制约因素: 输入2:A=[-2,1,-3,4,-1,2,1,-5,4] 产出2:6 说明2:子数组[4,-1,2,1]的最大可能和为6。 你能告诉我为什么下面的代码不起作用,代码中的错误是什么吗: