代码之家  ›  专栏  ›  技术社区  ›  Anuttar

leetcode问题918的逻辑混乱

  •  1
  • Anuttar  · 技术社区  · 1 年前

    问题陈述如下: 给定长度为n的圆形整数数组nums,返回nums的非空子数组的最大可能和。 圆形阵列意味着阵列的末端连接到阵列的起点。形式上,nums[i]的下一个元素是nums[(i+1)mod n],nums[i]的上一个元素为nums[[(i-1+n)mod n]。 子阵列最多只能包括一次固定缓冲器nums的每个元素。形式上,对于子数组nums[i],nums[i+1]。。。,nums[j],不存在i<=k1,k2<=j,其中k1 mod n==k2 mod n。

    现在,我在网上搜索了这个解决方案,发现所有不属于具有最大可能和的子数组(比如B)的元素组成的子数组形成了具有最小可能和的个子数组。 我无法理解这个逻辑。有人能解释一下它是如何工作的吗?

    我试图用矛盾的方式来证明这个说法,但无法得出任何结论。此外,我不明白为什么子数组A需要是最小可能和,为什么不在最小和最大之间?

    1 回复  |  直到 1 年前
        1
  •  0
  •   trincot Jakube    1 年前

    由不属于具有最大可能和的子阵列(比如B)的所有元素形成的子阵列形成具有最小可能和的个子阵列。

    这是真的。设为输入数组中所有元素的总和。设为子数组形成的最大和,则子数组的和必定为。

    如果不表示具有最小和的子阵列,那么将存在具有小于和的另一个子阵列。但是这些值的总和 in将大于,这是一个矛盾,因为我们从给定的事实开始 具有最大和的子阵列。