有序查找:不要把答案扔掉
数据已经按从小到大排好。每次缩小范围时,要确认被扔掉的一边里没有正确答案。
建议先会顺序查找,并理解数组下标 · 调整学习起点 →
十万个有序数里找位置
这不是考试。我们想了解你现在会怎样找。
一行数已经从小到大排好,有 100000 个。接下来有 100000 次询问,每次找第一个不小于目标的位置。
这里只记录选课起点,不判断对错;选择保存在本浏览器中。
第一个不小于 3 的位置在哪?
下标从 1 开始。请找出第一个大于或等于 3 的位置,不要停在后面重复的 3 上。
中间这个数太小,答案还在哪一边?
当前仍可能的范围是第 1 格到第 6 格。你查看第 3 格,值是 3,目标是 8。第 3 格以及它左边都小于 8。
3 出现了三次,严格大于 3 的第一个在哪?
如果目标改成“第一个严格大于 3”,就不能停在任意一个 3 上。
7 不在数组里时,答案是什么?
仍然找第一个不小于目标的位置。7 没有出现,但 8 是第一个不小于 7 的数。
全部都太小,以及数据没有排序。
这 6 个数里,第一个不小于 11 的位置已经在第 6 格右边,下标是 7。如果数组是 4、1、9、2 这样没有排序的数,就不能用“丢掉一半”保证没有扔掉答案。
引导实验已完成。
下一步,在没有引导的新题中独立应用。完成引导不等于独立掌握。
选择编程任务 ↓把发现,变成独立解决问题的能力。
你可以先浏览实验内容。登录并验证邮箱后,即可验证答案并保存学习进度。