H insert 提供一个思路吧(看了题解好像不太一样,又感觉自己这个思路挺简单的也挺容易理解的就分享一下思路)。 答案就是所有以1为左区间的最大区间长度之和。 明确这一点我们可以从右往左遍历所有的1(因为找合法区间要从左往右,方便合并)。对于当前的1我们按照正常思路从左往右找最大合法区间(同时将区间里的所有数加入到这个1的集合)。不过这里可以优化,如果我们加入的大于1就直接看能否加入(简单),不能加入则停止。如果加入的等于1,那么可以将之前遍历过的这个1的集合直接与我们当前寻找的区间的集合合并(直接跨过这个区间)。 到这里我们考虑一下是不是就变成了启发式合并。复杂度为nlogn。1e6可以过!