rbtree

Results 2 comments of rbtree

首先,把不连续的部分拆开,比如[1,2,2,3,3,4, 11,12,13]拆成[1,2,2,3,3,4],[11,12,13]分别处理。 然后把数组处理成每个数字的重复次数,例如[1,2,2,3,3,4,4,4,5,5,5,6,6,6,7,7,8],可以处理为[1,2,2,3,3,3,2,1] 就拿这个例子说明,[1,2,2,3,3,3,2,1] 最左边的3个数字肯定是要连在一起的,所以最左边3个数字-1,然后去掉最左边的0,变成[1,1, 3,3,3,2,1]。在这一步中,要先判断前三个数是否是非递减的,如果有递减例如[2,1,2,3,3,3,2,1],直接失败。 那么要不要继续往后延伸呢?如果后面的数字频次递增或者不变的时候,往后延伸,否则不再延伸。 对于[1,2,2,3,3,3,2,1]这个例子,[1,2,2,3,3,3]都在递增,所以处理到3为止,这样一轮之后,变成[1,1,2,2,2,2,1] 然后重复上述过程,最后数组为空,说明成功。 ```cpp class Solution { public: bool isPossible(vector& nums) { vector arrs = split(nums); for (vector &arr : arrs) { if (!subIsPossible(arr))...

Panic exceptions used to use the invalid opcode before Solidity 0.8.0, which consumed all gas available to the call. https://docs.soliditylang.org/en/latest/control-structures.html#revert 感觉可以看下字节码指令是revert还是invalid。 0.8.0以后,revert、require、assert的底层字节码都是revert。 revert的消耗量应该和要看自定义Error的参数数目有关。 assert在revert的时候会默认携带内建Error——Panic(1),它有1个Error参数,所以理论上会比不带Error参数的revert消耗多一些gas。 require(string)在revert的时候会是携带Error(string),虽然也只有1个参数,但是如果想描述清楚错误原因,一般需要比较长的字符串,所以通常是消耗的。