风雪夜归人

Results 3 issues of 风雪夜归人

计算最远的一对,distant方法应该是不对的。因为排序的时间复杂度是O(nlog(n)),所以先排序,不管怎么样都不可能在线性复杂度内完成。 正确的做法应该是不排序,直接扫描两边,第一遍找出最大值,第二遍找出最小值,这两个值就是最远的一对。

howMany()方法,在最坏情况下,复杂度为O(n),如果一个数组的所有元素都是指定的可以,那循环就会执行n次。 我觉得正确的做法应该是,参考前一题,先找出最小索引,再找出最大索引,这两个操作都是对数级的复杂度,然后直接就能求出结果。

https://github.com/xnnyygn/xraft/blob/3442abcf0c54d631e10d44df577771d27138de74/xraft-core/src/main/java/in/xnnyygn/xraft/core/log/sequence/FileEntrySequence.java#L208 如果数据文件已经被截断了,但索引文件尚未被更新,就会发生不一致。 所以我认为应该先保存 offset,然后清理索引,再清理数据。

enhancement