证明所有前缀和都是非负的

时间:2016-05-20 11:30:54

标签: arrays algorithm math proof

我们有一个具有n个整数的数组,其总和是非负的。

我需要证明存在索引i,这样从i开始,所有前缀和都是非负的,直到我们再次循环到达。

假设数组是 a 1 2 3 ,.....,a n ,这样 a 1 + a 2 + a 3 + ..... + a n > = 0。

因此,我们需要证明对于某些索引i,所有前缀和都是非负的,即, a i > = 0,
a i + a i + 1 > = 0,
a i + a i + 1 + a i + 2 > = 0


a i + a i + 1 + ... + a n + a 1 + .... + a i-1 > = 0

我需要以下问题https://www.interviewbit.com/problems/gas-station/。虽然我已经在这个问题的解决方案中使用了上述陈述,但我仍然无法证明这一点。

3 个答案:

答案 0 :(得分:1)

假设我们多次重复数组,然后构造这个重复数组的前缀和。前缀和将具有相同的模式,除了每次重复的数量高于数组的总和。

考虑前缀sum最小的索引x。这将发生在前n个样本中(如果数组的总和为正)。

如果你从这个位置x开始计算前缀和,那么所有后续前缀和将通过构造非负。

答案 1 :(得分:0)

考虑到你需要证明存在至少1个属性所持有的索引的前提,我建议反之亦然(即对于它所持有的每个索引,至少有一个前缀和为负),然后推断出一个矛盾,暗示必须至少有一个索引拥有这个属性。

答案 2 :(得分:0)

在所有索引对{j,k}中,存在一个具有最小(最大负)和(j,k)的对。设置i = k + 1。

如果存在一些序列a(i),a(i + 1),... a(i + n),n不在{j ... k}范围内,使得sum(i,n)是负的(即,负前缀和),那么这意味着sum(j,n)&lt; sum(j,k),与我们的初始陈述相矛盾。 (这是正确的,因为sum(j,n)= sum(j,k)+ sum(k + 1,n)= sum(i,n),我们声明sum(i,n)为负数。)< / p>

如果在{j ... k}范围内存在一些n,使得sum(a,n)为负,那么这意味着sum(k + 1,j-1)+ sum(j,n) &LT;因为我们知道完全和是正的,所以sum(k + 1,j-1)+ sum(j,k)&gt; 0(因为它包括所有元素。)因此,sum(j,n)&lt; sum(j,k),这与我们的初始约束相矛盾。

QED