#1872. GESP五级202509-选择判断

GESP五级202509-选择判断

单选题(每题 2 分,共 30 分)

第 1 题 以下哪种情况使用链表比数组更合适? {{ select(1) }}

  • 数据量固定且读多写少
  • 需要频繁在中间或开头插入、删除元素
  • 需要高效随机访问元素
  • 存储空间必须连续

第 2 题 函数 removeElements 删除单链表中所有结点值等于 val 的结点,并返回新的头结点,其中链表头结点为head ,则横线处填写( )。

image

{{ select(2) }}

  • image
  • image
  • image
  • image

第 3 题 函数 hasCycle 采用Floyd快慢指针法判断一个单链表中是否存在环,链表的头节点为 head ,即用两个指针在链表上前进: slow 每次走 1 步, fast 每次走 2 步,若存在环, fast 终会追上 slow (相遇);若无环,fast 会先到达 nullptr,则横线上应填写( )。

image

{{ select(3) }}

  • image
  • image
  • image
  • image

第 4 题 函数 isPerfectNumber 判断一个正整数是否为完全数(该数是否即等于它的真因子之和),则横线上应填写( )。一个正整数 n 的真因子包括所有小于 n 的正因子,如28的真因子为1, 2, 4, 7, 14。

image

{{ select(4) }}

  • i <= n
  • i*i <= n
  • i <= n/2
  • i < n

第 5 题 以下代码计算两个正整数的最大公约数(GCD),横线上应填写( )。

image

{{ select(5) }}

  • b
  • a
  • temp
  • a * b

第 6 题 函数 sieve 实现埃拉托斯特尼筛法(埃氏筛),横线处应填入( )。

image

{{ select(6) }}

  • i
  • i+1
  • i*2
  • i*i

第 7 题 函数 linearSieve 实现线性筛法(欧拉筛),横线处应填入( )。

image

{{ select(7) }}

  • i % p == 0
  • p % i == 0
  • i == p
  • i * p == n

第 8 题 关于 埃氏筛 和 线性筛 的比较,下列说法错误的是( )。

{{ select(8) }}

  • 埃氏筛可能会对同一个合数进行多次标记
  • 线性筛的理论时间复杂度更优,所以线性筛的速度往往优于埃氏筛
  • 线性筛保证每个合数只被其最小质因子筛到一次
  • 对于常见范围(n<=107n<=10^7 ),埃氏筛因实现简单,常数较小,其速度往往优于线性筛

第 9 题 唯一分解定理描述的是( )。

{{ select(9) }}

  • 每个整数都能表示为任意素数的乘积
  • 每个大于 1 的整数能唯一分解为素数幂乘积(忽略顺序)
  • 合数不能分解为素数乘积
  • 素数只有两个因子:1 和自身

第 10 题 给定一个 n x n 的矩阵 matrix ,矩阵的每一行和每一列都按升序排列。函数 countLE 返回矩阵中第k 小的元素,则两处横线上应分别填写( )。

image

{{ select(10) }}

  • image
  • image
  • image
  • image

第 11 题 下述C++代码实现了快速排序算法,下面说法错误的是( )。

image

{{ select(11) }}

  • 快速排序之所以叫“快速”,是因为它在平均情况下运行速度较快,常数小、就地排序,实践中通常比归并排序更高效。
  • 在平均情况下,划分的递归层数为lognlog n,每层中的总循环数为n ,总时间为O(nlogn)O(nlog n)
  • 在最差情况下,每轮划分操作都将长度为n 的数组划分为长度为 0 和 n-1 的两个子数组,此时递归层数达到n,每层中的循环数为 n,总时间为O(n2)O(n^2)
  • 划分函数 partition 中“从右往左查找”与“从左往右查找”的顺序可以交换。

第 12 题 下述C++代码实现了归并排序算法,则横线上应填写( )。

image

{{ select(12) }}

  • i < mid
  • j < right
  • i <= mid
  • j <= right

第 13 题 假设你是一家电影院的排片经理,只有一个放映厅。你有一个电影列表 movies ,其中 movies[i] =[start_i, end_i] 表示第 i 部电影的开始和结束时间。请你找出最多能安排多少部不重叠的电影,则横线上应分别填写的代码为( )。

image

{{ select(13) }}

  • a[0] < b[0] 和 lastEnd
  • a[1] < b[1] 和 lastEnd
  • a[0] < b[0] 和 movies[i][0]
  • a[1] < b[1] 和 movies[i][0]

第 14 题 给定一个整数数组 nums ,下面代码找到一个具有最大和的连续子数组,并返回该最大和。则下面说法错误的是( )。

image

{{ select(14) }}

  • 上述代码采用分治算法实现
  • 上述代码采用贪心算法
  • 上述代码时间复杂度为O(nlogn)O(nlogn)
  • 上述代码采用递归方式实现

第 15 题 给定一个由非负整数组成的数组 digits ,表示一个非负整数的各位数字,其中最高位在数组首位,且digits 不含前导0(除非是0本身)。下面代码对该整数执行 +1 操作,并返回结果数组,则横线上应填写( )。

image

{{ select(15) }}

  • digits[i] = 0;
  • digits[i] = 9;
  • digits[i] = 1;
  • digits[i] = 10;

2 判断题(每题 2 分,共 20 分)

第 1 题 基于下面定义的函数,通过判断 isDivisibleBy9(n) == isDigitSumDivisibleBy9(n) 代码可验算如果一个数能被9整除,则它的各位数字之和能被9整除。

image

{{ select(16) }}

第 2 题 假设函数 gcd() 能正确求两个正整数的最大公约数,则下面的 findMusicalPattern(4,6) 函数返回2。

image

{{ select(17) }}

第 3 题 下面递归实现的斐波那契数列的时间复杂度为。

image

{{ select(18) }}

第 4 题 链表通过更改指针实现高效的结点插入与删除,但结点访问效率低、占用内存较多,且对缓存利用不友好。

{{ select(19) }}

第 5 题 二分查找依赖数据的有序性,通过循环逐步缩减一半搜索区间来进行查找,且仅适用于数组或基于数组实现的数据结构。

{{ select(20) }}

第 6 题 线性筛关键是“每个合数只会被最小质因子筛到一次”,因此为O(n)O(n)

{{ select(21) }}

第 7 题 快速排序和归并排序都是稳定的排序算法。

{{ select(22) }}

第 8 题 下面代码采用分治算法求解标准 3 柱汉诺塔问题,时间复杂度为O(nlogn)O(nlogn)

image

{{ select(23) }}

第 9 题 所有递归算法都可以转换为迭代算法。

{{ select(24) }}

第 10 题 贪心算法总能得到全局最优解。

{{ select(25) }}