证明:SET容器里一旦出现相同的值就必定最小值是0
假设这两个区间分别是区间A和区间B,一共有三种情况。
情况一:区间A包含了区间B,例如A=a[3,5],B=a[4,5] ,由于元素非负,这种情况是不可能的。
情况二:区间A与区间B没有重叠部分,例如A=a[1,5],B=a[6,9] ,这种情况显然直接符合答案要求。
情况三:区间A与区间B有部分是重叠的。
我们假设区间A 是a[L,R] ,B 是a[K,R′] ,其中K∈[L,R],那说明[K,R′] 部分是重叠的。
我们设A 的区间和是a ,B的区间和是b ,重叠部分的和是k
那由于a=b ,则说明a−k=b−k ,那就说明去掉重叠部分,他们的和也是一样的,就说明就算把重叠部分去掉的两个子区间也是相同的,则最小值必定是0
例如5,2,3,6,1 ,即便[5,2,3],[3,6,1] 有重叠部分,那去掉一样的值,他们的和还是一样的。
即[5,2],[6,1] 也是符合答案的。
说明一旦出现相同的值,就必定最小值是0
证明:重叠区间不会影响答案决策。
假设两次选取的区间分别是区间A和区间B
如果区间A和区间B是其本身,即A=[L,R],B=[L,R] ,寻找第一个大于x 的整数等价于寻找第一个大于等于x+1 的正整数,或者通过erase 函数消去本值,由于前面证明每个数值只会存在一次,所以无需担心删除或者不考虑带来的后效性,为效率可以考虑前者。
如果区间A和区间B属于子区间关系,例如A=a[3,10],B=a[4,6] ,此时A 区间包含了B ,他们的差值就是A−B 所剩下区间的和,那既然他剩下的是A−B ,那说明我可以选择A−B 这个区间,再选择另一个区间,这样结果肯定比A−B 要小。至少可以选择[A−B],[B左端点不在重叠区间的第一个元素]所以子区间不会影响答案。
例如A=1,2,3,4,5,B=[3,4,5] ,他们的差值是A−B=[1,2,3]=6 ,那我直接选择[1,2,3],[4] 进行比较,得到的结果必然比没减去[4] 还要少。
如果区间A和区间B有部分重叠关系,即上面的第三个情况,同样的道理,那他们的差值就是A 区间和B 区间各自不交界的地方,那既然这样,直接选择这两个区间进行相减得到绝对值,必定比AB区间加起来还要小,所以也不会影响答案。
例如有数组a[]={1,2,3,4,5},A=[1,2,3],B=[3,4,5] ,那得到的结果必然是[1,2,4,5] 之和,那我直接选择[1,2],[4,5] 两个分区间进行相减,必然比[1,2,4,5] 相加的结果要小。