林老师 · 客观题题库 · 专题 15 二分查找 · 复习强化

专题 15 二分查找 · 复习强化

100 题 · 每题对应一个知识细节 · 全部原创
真题
复刻
试卷编号ORIG-专题15二分查找-复习强化
题目总数103 题 · 100 分
试卷类型客观题
考生须知:
① 本卷共 17 大部分,合计 103 题 · 100 分,全部为客观题;
② 试卷右上角设有 「提交答卷」「重置考试」 按钮,提交后系统自动判分并显示答题正确情况,请确认全部作答后再行提交;
③ 试卷不显示答案,提交后方可查看每题作答与正确答案的对照;
④ 答卷进度会保留在本地缓存中,刷新或再次打开仍可继续作答;
⑤ 本卷仅供学生练习使用;请勿用于其他用途;题面有问题请联系:i64coder@163.com。

判 分 报 告

0 / 100 分
0
答 对 · 得 0
0
答 错 · 失 0
当前筛选下没有题目

查找基础与顺序查找

8 QUESTIONS · 2 POINTS EACH
第 1 题 A1 未作答

在数组中查找某个给定值,若找到,函数通常返回的是( )。

(1 分)
第 2 题 A2 未作答

下列最适合用顺序查找(从头到尾逐个比较)的情形是( )。

(1 分)
第 3 题 A3 未作答

用顺序查找在 nn 个元素的数组中查找某个值,最坏情况下需要比较的次数是( )。

(1 分)
第 4 题 A4 未作答

顺序查找成功找到目标时(假设目标等概率出现在每个位置),平均比较次数约是( )。

(1 分)
第 5 题 A5 未作答

单链表不能高效地使用二分查找,根本原因是( )。

(1 分)
第 6 题 A6 未作答

C++ 数组 int a[8]; 的合法下标范围是( )。

(1 分)
第 7 题 A7 未作答

顺序查找的哨兵法把待查值先放到数组末尾空位上,其目的是( )。

(1 分)
第 8 题 A8 未作答

关于顺序查找,下列说法正确的是( )。

(1 分)

二分查找基本概念

8 QUESTIONS · 2 POINTS EACH
第 9 题 B1 未作答

二分查找的基本思想是( )。

(1 分)
第 10 题 B2 未作答

能对数组使用二分查找,必须满足的前提是( )。

(1 分)
第 11 题 B3 未作答

升序数组二分查找中,若 a[mid] < x,下一步应该( )。

(1 分)
第 12 题 B4 未作答

nn 个元素的有序数组,二分查找的时间复杂度是( )。

(1 分)
第 13 题 B5 未作答

100100 万(约 2202^{20})个元素的有序数组中查找,二分查找最多比较约 2020 次,顺序查找最坏要比较( )。

(1 分)
第 14 题 B6 未作答

二分查找每一轮循环真正维护的东西是( )。

(1 分)
第 15 题 B7 未作答

对单链表强行使用「二分」思想,效率提不上去,是因为( )。

(1 分)
第 16 题 B8 未作答

关于二分查找的局限,正确的是( )。

(1 分)

二分实现核心细节

7 QUESTIONS · 2 POINTS EACH
第 17 题 C1 未作答

二分中点常写成 mid = l + (r - l) / 2 而不是 mid = (l + r) / 2,原因是( )。

(1 分)
第 18 题 C2 未作答

闭区间写法的二分查找中,循环条件用 while (l <= r),原因是( )。

(1 分)
第 19 题 C3 未作答

比较后收缩区间写 l = mid + 1r = mid - 1 而不是 l = midr = mid,原因是( )。

(1 分)
第 20 题 C4 未作答

二分查找函数常把结果变量初始化为 1-1,其含义是( )。

(1 分)
第 21 题 C5 未作答

01int bsearch(int a[], int l, int r, int x) {
02    if (l > r) return -1;
03    int mid = (l + r) / 2;
04    if (a[mid] == x) return mid;
05    if (a[mid] < x) return bsearch(a, mid + 1, r, x);
06    return bsearch(a, l, mid - 1, x);
07}
08int main() {
09    int a[] = {3, 7, 11, 15, 19};
10    cout << bsearch(a, 0, 4, 11);
11    return 0;
12}

输出是( )。

(1 分)
第 22 题 C6 未作答

01int a[] = {3, 7, 11, 15, 19, 23};
02int x = 5;
03int l = 0, r = 5;
04while (l <= r) {
05    int mid = (l + r) / 2;
06    if (a[mid] == x) break;
07    else if (a[mid] < x) l = mid + 1;
08    else r = mid - 1;
09}
10cout << l << " " << r;

输出是( )。

(1 分)
第 23 题 C7 未作答

10001000 个元素的有序数组中二分查找,第一次比较结束后,候选元素最多还剩( )。

(1 分)

边界查找变体

8 QUESTIONS · 2 POINTS EACH
第 24 题 D1 未作答

要找升序数组中第一个等于 x 的位置,二分命中 a[mid] == x 后正确的做法是( )。

(1 分)
第 25 题 D2 未作答

要找升序数组中最后一个等于 x 的位置,二分命中后正确的做法是( )。

(1 分)
第 26 题 D3 未作答

在升序数组中,lower_bound 查找返回的位置语义是( )。

(1 分)
第 27 题 D4 未作答

在升序数组中,upper_bound 查找返回的位置语义是( )。

(1 分)
第 28 题 D5 未作答

「找最后一个满足条件的位置」的二分中,中点常写成 mid = (l + r + 1) / 2 并配 l = mid,加一的目的是( )。

(1 分)
第 29 题 D6 未作答

条件 P(i) 随下标 i 单调(前段全假、后段全真)时,找第一个 P(i) 为真的下标,可以用二分的原因是( )。

(1 分)
第 30 题 D7 未作答

x 插入升序数组并保持有序,插入点的位置恰好等于( )。

(1 分)
第 31 题 D8 未作答

升序数组中 x 出现的次数,可以用两次边界二分直接算出,公式是( )。

(1 分)

二分答案概念

7 QUESTIONS · 2 POINTS EACH
第 32 题 E1 未作答

「二分答案」指的是( )。

(1 分)
第 33 题 E2 未作答

二分答案成立的前提是答案具有单调性,即( )。

(1 分)
第 34 题 E3 未作答

求「最大的可行答案」的二分答案框架中,check(mid) 为真时应执行( )。

(1 分)
第 35 题 E4 未作答

下列题目特征中最提示「这题该二分答案」的是( )。

(1 分)
第 36 题 E5 未作答

二分答案中 check(v) 函数的职责是( )。

(1 分)
第 37 题 E6 未作答

二分答案时答案变量常声明为 long long,典型原因是( )。

(1 分)
第 38 题 E7 未作答

二分答案与普通二分查找的关系,最准确的说法是( )。

(1 分)

二分答案经典应用

7 QUESTIONS · 2 POINTS EACH
第 39 题 F1 未作答

砍树问题:给每棵树一个高度,选一个统一的砍伐高度,高于它的部分被截下,要求截得的木材总量不少于需求量,且砍伐高度尽量高。答案随砍伐高度的变化是( )。

(1 分)
第 40 题 F2 未作答

跳石头问题:从起点到终点有若干石头,最多移走 MM 块,要使剩余石头间(含起终点)的最短跳跃距离尽量大。二分的对象是( )。

(1 分)
第 41 题 F3 未作答

分巧克力问题:把多块矩形巧克力切成若干正方形小份(每块只能按一种边长切),要切出至少 KK 份且边长尽量大。随着切的边长增大,能切出的总份数( )。

(1 分)
第 42 题 F4 未作答

条件 mid * mid <= 30mid 增大由真变假,找最大的满足条件的 mid,这类问题可以直接二分,原因是( )。

(1 分)
第 43 题 F5 未作答

求最大可行答案时,在 check(mid) 为真的分支里写 ans = mid,其作用是( )。

(1 分)
第 44 题 F6 未作答

二分「砍树高度」时,右界 r 的合理初值通常取( )。

(1 分)
第 45 题 F7 未作答

跳石头问题的 check(mid) 里,从起点向终点扫描,遇到与「上一块保留位置」距离小于 mid 的石头就移走,这属于( )。

(1 分)

浮点二分

6 QUESTIONS · 2 POINTS EACH
第 46 题 G1 未作答

用二分法求 2\sqrt{2}:初始区间 [0,2][0, 2],每步取中点,若中点的平方不超过 22 就把左端移到中点,否则把右端移到中点。这个方法能锁定平方根的原因是( )。

(1 分)
第 47 题 G2 未作答

浮点二分常用 while (r - l > 1e-6) 作为循环条件,终止的含义是( )。

(1 分)
第 48 题 G3 未作答

浮点二分也常直接 for (int i = 0; i < 100; i++) 循环一百次,原因是( )。

(1 分)
第 49 题 G4 未作答

用二分求方程 f(x)=0f(x)=0 的根,要求 ff 在区间 [l,r][l, r] 两端点处的函数值( )。

(1 分)
第 50 题 G5 未作答

浮点二分答案要求「保留 33 位小数」,循环精度 eps 通常取得比输出精度更小(如 10610^{-6}),原因是( )。

(1 分)
第 51 题 G6 未作答

x\sqrt{x}xx 为正实数)时,初始区间取 [0,x][0, x]x<1x < 1 时会出问题,更稳妥的右界是( )。

(1 分)

复杂度与选择

5 QUESTIONS · 2 POINTS EACH
第 52 题 H1 未作答

二分查找每轮能把候选元素排除一半,依赖的两个事实是( )。

(1 分)
第 53 题 H2 未作答

2201002^{20} \approx 100 万元素的有序数组,二分查找最多比较的次数约为( )。

(1 分)
第 54 题 H3 未作答

只对无序数组做一次查找,选择顺序查找而不是「先排序再二分」的理由是( )。

(1 分)
第 55 题 H4 未作答

对同一批数据要做上万次「查某个值在不在」的查询,常见的高效方案是( )。

(1 分)
第 56 题 H5 未作答

100100 个已排序的数据元素,采用折半查找,最大比较次数是( )。

(1 分)

顺序查找代码

5 QUESTIONS · 2 POINTS EACH
第 57 题 I1 未作答

01int a[] = {4, 7, 2, 7, 9};
02int x = 7;
03int pos = -1;
04for (int i = 0; i < 5; i++)
05    if (a[i] == x) { pos = i; break; }
06cout << pos;

输出是( )。

(1 分)
第 58 题 I2 未作答

01int a[] = {3, 1, 4, 1, 5};
02int x = 9;
03int pos = -1;
04for (int i = 0; i < 5; i++)
05    if (a[i] == x) pos = i;
06cout << pos;

输出是( )。

(1 分)
第 59 题 I3 未作答

01int a[] = {2, 5, 2, 3, 2, 8};
02int cnt = 0;
03for (int i = 0; i < 6; i++)
04    if (a[i] == 2) cnt++;
05cout << cnt;

输出是( )。

(1 分)
第 60 题 I4 未作答

01int a[] = {6, 3, 6, 6, 1};
02int pos = -1;
03for (int i = 0; i < 5; i++)
04    if (a[i] == 6) pos = i;
05cout << pos;

与第 57 题不同,这段循环没有 break,输出是( )。

(1 分)
第 61 题 I5 未作答

01int a[] = {5, 9, 3, 9, 4};
02int k = 0;
03for (int i = 1; i < 5; i++)
04    if (a[i] > a[k]) k = i;
05cout << k << " " << a[k];

输出是( )。

(1 分)

二分代码阅读

7 QUESTIONS · 2 POINTS EACH
第 62 题 J1 未作答

01int a[] = {2, 5, 8, 12, 16, 23, 38, 56, 72, 91};
02int x = 23;
03int l = 0, r = 9;
04int res = -1;
05while (l <= r) {
06    int mid = (l + r) / 2;
07    if (a[mid] == x) { res = mid; break; }
08    else if (a[mid] < x) l = mid + 1;
09    else r = mid - 1;
10}
11cout << res;

输出是( )。

(1 分)
第 63 题 J2 未作答

01int a[] = {2, 5, 8, 12, 16, 23, 38, 56, 72, 91};
02int x = 24;
03int l = 0, r = 9;
04int res = -1;
05while (l <= r) {
06    int mid = (l + r) / 2;
07    if (a[mid] == x) { res = mid; break; }
08    else if (a[mid] < x) l = mid + 1;
09    else r = mid - 1;
10}
11cout << res;

输出是( )。

(1 分)
第 64 题 J3 未作答

01int a[] = {91, 72, 56, 38, 23, 16, 12, 8, 5, 2};
02int x = 72;
03int l = 0, r = 9, res = -1;
04while (l <= r) {
05    int mid = (l + r) / 2;
06    if (a[mid] == x) { res = mid; break; }
07    else if (a[mid] > x) l = mid + 1;
08    else r = mid - 1;
09}
10cout << res;

输出是( )。

(1 分)
第 65 题 J4 未作答

01int a[] = {1, 3, 5, 7, 9, 11, 13, 15};
02int x = 15;
03int l = 0, r = 7;
04while (l <= r) {
05    int mid = (l + r) / 2;
06    cout << mid;
07    if (a[mid] == x) break;
08    else if (a[mid] < x) l = mid + 1;
09    else r = mid - 1;
10}

输出是( )。

(1 分)
第 66 题 J5 未作答

01int a[] = {2, 5, 8, 12, 16, 23, 38, 56, 72, 91};
02int x = 91;
03int l = 0, r = 9, cnt = 0;
04while (l <= r) {
05    int mid = (l + r) / 2;
06    cnt++;
07    if (a[mid] == x) break;
08    else if (a[mid] < x) l = mid + 1;
09    else r = mid - 1;
10}
11cout << cnt;

输出是( )。

(1 分)
第 67 题 J6 未作答

01int a[] = {1, 3, 3, 5, 7, 7, 7, 9};
02int x = 7;
03int l = 0, r = 8;
04while (l < r) {
05    int mid = (l + r) / 2;
06    if (a[mid] >= x) r = mid;
07    else l = mid + 1;
08}
09cout << l << " " << a[l];

输出是( )。

(1 分)
第 68 题 J7 未作答

01int a[] = {1, 3, 3, 5, 7, 7, 7, 9};
02int x = 7;
03int l = 0, r = 8;
04while (l < r) {
05    int mid = (l + r) / 2;
06    if (a[mid] > x) r = mid;
07    else l = mid + 1;
08}
09cout << l << " " << a[l];

输出是( )。

(1 分)
拾壹

边界变体代码

6 QUESTIONS · 2 POINTS EACH
第 69 题 K1 未作答

01int a[] = {2, 4, 4, 4, 6, 8};
02int x = 4;
03int l = 0, r = 5;
04while (l < r) {
05    int mid = (l + r) / 2;
06    if (a[mid] >= x) r = mid;
07    else l = mid + 1;
08}
09if (a[l] == x) cout << l;
10else cout << -1;

输出是( )。

(1 分)
第 70 题 K2 未作答

01int a[] = {2, 4, 4, 4, 6, 8};
02int x = 4;
03int l = 0, r = 6;
04while (l < r) {
05    int mid = (l + r) / 2;
06    if (a[mid] <= x) l = mid + 1;
07    else r = mid;
08}
09cout << l - 1;

输出是( )。

(1 分)
第 71 题 K3 未作答

01int a[] = {1, 3, 5, 7, 9};
02int x = 6;
03int l = 0, r = 5;
04while (l < r) {
05    int mid = (l + r) / 2;
06    if (a[mid] >= x) r = mid;
07    else l = mid + 1;
08}
09cout << l;

输出是( )。

(1 分)
第 72 题 K4 未作答

01long long n = 40;
02long long l = 0, r = 40, ans = 0;
03while (l <= r) {
04    long long mid = (l + r) / 2;
05    if (mid * mid <= n) { ans = mid; l = mid + 1; }
06    else r = mid - 1;
07}
08cout << ans;

输出是( )。

(1 分)
第 73 题 K5 未作答

l = 2000000000r = 2100000000 时写 mid = (l + r) / 2,风险是( )。

(1 分)
第 74 题 K6 未作答

01int a[] = {1, 2, 2, 2, 5};
02int x = 2;
03int l = 0, r = 4;
04while (l < r) {
05    int mid = (l + r + 1) / 2;
06    if (a[mid] <= x) l = mid;
07    else r = mid - 1;
08}
09cout << l << " " << a[l];

输出是( )。

(1 分)
拾贰

二分答案代码

6 QUESTIONS · 2 POINTS EACH
第 75 题 L1 未作答

01int a[] = {20, 15, 10, 17};
02int cut = 15;
03int total = 0;
04for (int i = 0; i < 4; i++)
05    if (a[i] > cut) total += a[i] - cut;
06cout << total;

输出是( )。

(1 分)
第 76 题 L2 未作答

01int a[] = {20, 15, 10, 17};
02int need = 7;
03int l = 0, r = 20, ans = 0;
04while (l <= r) {
05    int mid = (l + r) / 2;
06    int total = 0;
07    for (int i = 0; i < 4; i++)
08        if (a[i] > mid) total += a[i] - mid;
09    if (total >= need) { ans = mid; l = mid + 1; }
10    else r = mid - 1;
11}
12cout << ans;

输出是( )。

(1 分)
第 77 题 L3 未作答

石头距起点依次为 221111141417172121,终点在 2525,最多移走 22 块石头。判定「最短跳跃距离能否达到 44」:从起点向终点扫,与上一块保留位置距离小于 44 的石头就移走。需要的移走数是( )。

(1 分)
第 78 题 L4 未作答

两块巧克力尺寸分别为 6×56\times55×55\times5,按边长 55 切正方形,能切出的总份数是( )。

(1 分)
第 79 题 L5 未作答

01int l = 0, r = 30, ans = -1;
02while (l <= r) {
03    int mid = (l + r) / 2;
04    if (mid * mid <= 30) { ans = mid; l = mid + 1; }
05    else r = mid - 1;
06}
07cout << ans;

输出是( )。

(1 分)
第 80 题 L6 未作答

01int l = 0, r = 100;
02while (l < r) {
03    int mid = (l + r) / 2;
04    if (mid >= 17) r = mid;
05    else l = mid + 1;
06}
07cout << l;

输出是( )。

(1 分)
拾叁

浮点二分代码

3 QUESTIONS · 2 POINTS EACH
第 81 题 M1 未作答

01double x = 2.0;
02double l = 0, r = 2.0;
03for (int i = 0; i < 3; i++) {
04    double mid = (l + r) / 2;
05    if (mid * mid <= x) l = mid;
06    else r = mid;
07}
08cout << l << " " << r;

输出是( )。

(1 分)
第 82 题 M2 未作答

浮点二分初始区间宽度为 100100,要求把区间收缩到宽度小于 10610^{-6},至少需要二分约( )次。

(1 分)
第 83 题 M3 未作答

01double l = 1, r = 2;    // f(t) = t^3 - 3,两端函数值异号
02for (int i = 0; i < 4; i++) {
03    double mid = (l + r) / 2;
04    if (mid * mid * mid - 3 < 0) l = mid;
05    else r = mid;
06}
07cout << l << " " << r;

输出是( )。

(1 分)
拾肆

完善程序

6 QUESTIONS · 2 POINTS EACH
第 84 题 N1 未作答

补全下面二分查找的循环条件:

01int a[] = {2, 5, 8, 12, 16, 23, 38, 56};
02int x = 16;
03int l = 0, r = 7;
04int res = -1;
05while (/* 1 */) {
06    int mid = (l + r) / 2;
07    if (a[mid] == x) { res = mid; break; }
08    else if (a[mid] < x) l = mid + 1;
09    else r = mid - 1;
10}

空位 /* 1 */ 处应填( )。

(1 分)
第 85 题 N2 未作答

补全下面二分的中点计算:

01int a[] = {2, 5, 8, 12, 16, 23, 38, 56};
02int x = 8;
03int l = 0, r = 7;
04int res = -1;
05while (l <= r) {
06    int mid = /* 1 */;
07    if (a[mid] == x) { res = mid; break; }
08    else if (a[mid] < x) l = mid + 1;
09    else r = mid - 1;
10}

空位 /* 1 */ 处应填( )。

(1 分)
第 86 题 N3 未作答

补全下面二分查找的区间收缩:

01int a[] = {2, 5, 8, 12, 16, 23, 38, 56};
02int x = 23;
03int l = 0, r = 7;
04int res = -1;
05while (l <= r) {
06    int mid = (l + r) / 2;
07    if (a[mid] == x) { res = mid; break; }
08    else if (a[mid] < x) /* 1 */ ;
09    else r = mid - 1;
10}

空位 /* 1 */ 处应填( )。

(1 分)
第 87 题 N4 未作答

「求最大可行答案」的二分答案中,补全可行分支的动作:

01int l = 0, r = 1000000, ans = 0;
02while (l <= r) {
03    int mid = (l + r) / 2;
04    if (check(mid)) { /* 1 */ ; l = mid + 1; }
05    else r = mid - 1;
06}
07cout << ans;

空位 /* 1 */ 处应填( )。

(1 分)
第 88 题 N5 未作答

砍树问题的 check(cut) 统计截得的木材总量,补全累计式:

01int h[] = {20, 15, 10, 17};
02int n = 4, cut = 15;
03int total = 0;
04for (int i = 0; i < n; i++)
05    if (h[i] > cut) total += /* 1 */ ;

空位 /* 1 */ 处应填( )。

(1 分)
第 89 题 N6 未作答

补全浮点二分求平方根的循环条件:

01double x = 2.0;
02double l = 0, r = 2.0;
03while (/* 1 */) {
04    double mid = (l + r) / 2;
05    if (mid * mid <= x) l = mid;
06    else r = mid;
07}
08cout << (l + r) / 2;

空位 /* 1 */ 处应填( )。

(1 分)
拾伍

综合应用

5 QUESTIONS · 2 POINTS EACH
第 90 题 O1 未作答

01int a[] = {5, 1, 9, 3, 7};
02sort(a, a + 5);
03int x = 7;
04int l = 0, r = 4, res = -1;
05while (l <= r) {
06    int mid = (l + r) / 2;
07    if (a[mid] == x) { res = mid; break; }
08    else if (a[mid] < x) l = mid + 1;
09    else r = mid - 1;
10}
11cout << res;

输出是( )。

(1 分)
第 91 题 O2 未作答

01int a[] = {1, 2, 2, 2, 2, 5, 6};
02int x = 2;
03int lo = 0, hi = 7;
04while (lo < hi) {
05    int mid = (lo + hi) / 2;
06    if (a[mid] >= x) hi = mid;
07    else lo = mid + 1;
08}
09int up = lo;
10lo = 0; hi = 7;
11while (lo < hi) {
12    int mid = (lo + hi) / 2;
13    if (a[mid] > x) hi = mid;
14    else lo = mid + 1;
15}
16cout << up << " " << lo << " " << (lo - up);

输出是( )。

(1 分)
第 92 题 O3 未作答

01int a[] = {2, 5, 8, 12, 16};
02int x = 13;
03int l = 0, r = 4;
04while (l < r) {
05    int mid = (l + r) / 2;
06    if (a[mid] < x) l = mid + 1;
07    else r = mid;
08}
09if (l > 0 && x - a[l - 1] <= a[l] - x) cout << a[l - 1];
10else cout << a[l];

输出是( )。

(1 分)
第 93 题 O4 未作答

01int a[] = {0, 1, 3, 4, 5};    // 本应是从 0 开始的连续数,缺了一个
02int l = 0, r = 4, ans = 5;
03while (l <= r) {
04    int mid = (l + r) / 2;
05    if (a[mid] == mid) l = mid + 1;
06    else { ans = mid; r = mid - 1; }
07}
08cout << ans;

输出是( )。

(1 分)
第 94 题 O5 未作答

二分查找代码中,lrmid 的身份是( )。

(1 分)
拾陆

易错排查

6 QUESTIONS · 2 POINTS EACH
第 95 题 P1 未作答

「找最后一个满足条件的位置」的二分中,写了 l = mid 但中点仍是 (l + r) / 2,当区间收缩到只剩两个元素 [l, l+1]a[mid] <= x 时会发生的现象是( )。

(1 分)
第 96 题 P2 未作答

lr 都是接近 int 上限的大数时,(l + r) / 2 出错,避免这个问题的正确写法是( )。

(1 分)
第 97 题 P3 未作答

升序数组二分查找中,把 a[mid] < x 的分支误写成 r = mid - 1,可能的后果是( )。

(1 分)
第 98 题 P4 未作答

对无序数组直接使用标准二分查找,结果是( )。

(1 分)
第 99 题 P5 未作答

「求最大可行答案」的二分答案中,check(mid) 为真时误写成了 r = mid - 1,后果是( )。

(1 分)
第 100 题 P6 未作答

二分循环结束后,直接使用循环内的 mid 变量(如输出 a[mid])的问题是( )。

(1 分)

真 题 演 练

3 QUESTIONS · 真题演练不计分
第 1 题 单选 未作答

设有 100100 个已排好序的数据元素,采用折半查找时,最大比较次数为( )。

(0 分)
CSP-J 2019 · 单选 第5题 | 知识点 二分查找、时间复杂度
第 2 题 单选 未作答

假设有序表中有 1000 个元素,则用二分法查找元素 X 最多需要比较( )次。

(0 分)
CSP-J 2024 · 单选 第9题 | 知识点 剪枝、排序稳定性
第 106~110 题 完善程序 (共 0 分) 未作答

试补全程序。

1  #include <iostream>
2  #include <vector>
3 
4  using namespace std;
5 
6  int find_missing(vector<int>& nums) {
7      int left = 0, right = nums.size() - 1;
8      while (left < right) {
9          int mid = left + (right - left) / 2;
10          if (nums[mid] == mid + ①) {
11              ②;
12          } else {
13              ③;
14          }
15      }
16      return ④;
17  }
18 
19  int main() {
20      int n;
21      cin >> n;
22      vector<int> nums(n);
23      for (int i = 0; i < n; i++) cin >> nums[i];
24      int missing_number = find_missing(nums);
25      if (missing_number == ⑤) {
26          cout << "Sequence is consecutive" << endl;
27      } else {
28          cout << "Missing number is " << missing_number << endl;
29      }
30      return 0;
31  }

106.

①处应填( )

107.

②处应填( )

108.

③处应填( )

109.

④处应填( )

110.

⑤处应填( )

CSP-J 2023 · 完善程序 第33-37题 | 知识点 二分查找、一维数组