【发布时间】:2019-09-21 16:12:45
【问题描述】:
我最近遇到了一个带有两个指针的子数组和问题的解决方案,我不太确定该算法的正确性。子数组和问题包括找到一个子数组,其和等于某个目标值。我已经使用哈希表看到了这个问题的解决方案,但我质疑这个其他解决方案的正确性。让我给你们举一个算法的例子。
假设你有一个数组 [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
总和现在等于目标,算法停止。对我来说,该算法似乎不适用于边缘情况。但它看起来适合我给它的每个测试用例,它运行 O(n)。有人可以给我一个正确的证明吗?
谢谢
edit - 为了论证起见,假设为正整数。
【问题讨论】:
-
如果您对正确性证明感兴趣。请让社区知道您尝试了什么。要求完整的正确性证明听起来很宽泛。
-
To me the algorithm doesn't seem to be valid for edge cases.那些边缘情况是什么?
标签: algorithm