|
1
4
的要点
代码中唯一的错误是更新
(正如@btilly所指出的,如果我们允许重复的值,这个算法就会失败。) 从@btilly编辑 为了修复该潜在缺陷,如果值相等,我们将搜索具有相同值的范围。为此,我们以1、2、4、8等大小的步骤前进,直到值切换,然后进行二进制搜索。同样向后走。现在,在每条边上寻找差异。
搜索所需的努力是
我在评论中声称,如果最多
但如果最多
|
|
2
4
这个问题的原理很简单,细节很难。
您已安排好该阵列
现在,您需要确保处理以下边缘情况。
祝你好运 |
|
|
3
3
您的代码没有处理缺少的元素是索引m本身的情况。后面的if/else子句将始终移动缺失元素的边界,使其不包括m。 您可以通过包括附加检查来解决此问题:
另一种方法是存储m的最后一个值:
这将导致它在上次检测到不匹配时返回。 |