#GESP202603C5T2. 判断题
判断题
第 1 题
有一个存储了几个整数的线性表,分别用数组和单链表两种方式实现。在已知下标(或结点指针)的前提下,数组的随机访问是O(1),而在链表中已知某结点的指针时,在该结点之后插入一个新结点的操作也是O(1)。 [cite: 2139]
{{ select(1) }}
- 正确
- 错误
第 2 题
若数组a已按升序排列,则下面代码可以正确实现“在a中查找第一个大于等于x的元素的位置”。 [cite: 2140]
int lowerBound(vector<int>& a, int x) {
int l = 0, r = a.size();
while (l < r) {
int mid = (l + r) / 2;
if(a[mid] >= x) r = mid;
else l = mid + 1;
}
return l;
}
{{ select(2) }}
- 正确
- 错误
第 3 题
快速排序只要每次都选取中间元素作为枢轴,就一定是稳定排序。 [cite: 2152]
{{ select(3) }}
- 正确
- 错误
第 4 题
若某算法满足递推式:,则其时间复杂度为 。 [cite: 2153]
{{ select(4) }}
- 正确
- 错误
第 5 题
在一个数组中,如果两个元素 a[i]和a[j]满足 且 ,则a[i]和a[j]是一个逆序对。下面代码可以正确统计数组a区间 [l,r] 内的逆序对总数。 [cite: 2154, 2156]
int i = l, j = m + 1;
while(i <= m && j <= r) {
if(a[i] <= a[j]) i++;
else {
cnt += (m - i + 1);
j++;
}
}
{{ select(5) }}
- 正确
- 错误
第 6 题
唯一分解定理保证:若一个数未被任何不超过其平方根的质数筛去,则它一定是质数。 [cite: 2174]
{{ select(6) }}
- 正确
- 错误
第 7 题
假设数组的值域范围是D,以下程序的时间复杂度是 。 [cite: 2175]
// std::sort(a, a + n);
// l = 0, r = a[n-1] - a[0];
// while(l < r) { ... check() ... }
{{ select(7) }}
- 正确
- 错误
第 8 题
若一个问题满足最优子结构性质,则一定可以用贪心算法得到最优解。 [cite: 2250]
{{ select(8) }}
- 正确
- 错误
第 9 题
线性筛相比埃氏筛的核心改进在于:埃氏筛中一个合数可能被多个质数重复标记,线性筛通过“每个合数只被其最大质因子筛去”的策略,保证每个合数恰好被标记一次,从而实现O(n)的时间复杂度。 [cite: 2251]
{{ select(9) }}
- 正确
- 错误
第 10 题
任何递归程序都可以改写为等价的非递归程序,但改写后的非递归程序一定需要显式地使用栈来模拟递归调用过程。 [cite: 2252]
{{ select(10) }}
- 正确
- 错误