


第1题
在C++中,若结构体中包含一个 static 成员变量,则该变量的存储空间属于结构体对象的一部分。
答案:错误(×)
1、什么是static成员?
例如:
#include<iostream>
using namespace std;
struct Student
{
int age;
static int cnt;
};
int Student::cnt = 0;
int main()
{
Student a, b;
a.age = 10;
b.age = 12;
Student::cnt++;
cout << a.age << endl;
cout << b.age << endl;
cout << Student::cnt << endl;
}
2、它到底存在哪里?
普通成员:
对象a
+——+
| age |
+——+
对象b
+——+
| age |
+——+
而
static cnt
只有
一份!
放在全局静态区
并不属于任何对象。
大家可以理解成:
学校
学生A
学生B
学生C
↓
人数
只有一个
不会每个学生都保存一份人数。
3、为什么错?
因为
sizeof(Student)
不会计算
static
成员。
所以
static不是对象的一部分。
第2题
二项式展开式所有二项式系数之和等于2ⁿ。
答案:正确(√)
1、例如:
(a+b)^3
= a³ +3a²b +3ab² +b³
系数:
1
3
3
1
相加:
8
=
2³
2、为什么?
把
a=1
b=1
代进去。
得到:
(1+1)^n
=
2^n
右边就是
所有系数之和。
所以一定成立。
3、八级考点:
杨辉三角
第n行和
=
2^n
第3题
const int & 可以绑定左值,也可以绑定右值。
答案:正确(√)
1、例如:
void fun(const int &x)
{
cout << x << endl;
}
int main()
{
int a = 5;
fun(a); // 左值
fun(100); // 右值
}
都合法。
2、为什么?
普通引用:
int &x = 5;
错误。
因为
5
没有地址
但是
const int &
允许绑定临时变量。
这是C++的重要特性。
3、为什么STL喜欢写:
const string &
因为:
既不用复制
又可以接收临时对象。
效率高。
第4题
若一个无向图最小生成树唯一,则所有边权一定不同。
答案:错误(×)
1、很多同学第一眼觉得:
好像是真的。
其实不是。
2、例如:
A
|
1
|
B
|
2
|
C
再加一条:
A—–5—–C
边权:
1
2
5
当然唯一。
3、再改一下:
A
|
1
|
B
|
1
|
C
还有:
A—–5—–C
最小生成树还是:
AB
BC
仍然唯一。
但是:
出现两个
1
说明:
边权
可以重复。
4、真正成立的是:
所有边权不同 ⇒ MST一定唯一。
反过来
不成立。
第5题
快速排序最好、平均、最坏都是O(nlogn)
答案:错误(×)
1、这是经典考点。
最好:
O(nlogn)
平均:
O(nlogn)
最坏:
O(n²)
2、什么时候最坏?
例如:
已经有序。
每次都拿第一个元素。
1
2
3
4
5
第一次:
划分:
左:
空
右:
4个
第二次:
又:
左:
空
右:
3个
一直退化。
最后:
n
+
n-1
+
…
+
1
就是
O(n²)
3、所以很多库都会:
随机化。
三数取中。
避免退化。
第6题
所有顶点度数都是偶数,就一定存在欧拉回路。
答案:错误(×)
1、这里最容易掉坑。
少了一个条件。
必须:
图连通。
2、例如:
两个圆。
○ ○
每个点度都是2。
但是:
两部分完全不连。
怎么走?
根本不可能。
3、欧拉回路条件:
①连通
②所有点偶度
缺一不可。
第7题
ST表预处理O(nlogn),查询O(1)
答案:正确(√)
1、这是RMQ经典复杂度。
ST表:
预处理:
O(nlogn)
查询:
O(1)
2、为什么?
因为:
提前把
2^0
2^1
2^2
…
全部算好了。
3、查询:
直接取两个区间。
一次max。
结束。
4、八级考点:
| ST表 | O(nlogn) | O(1) |
| 线段树 | O(n) | O(logn) |
| 树状数组 | O(n) | O(logn) |
第8题
所有边统一增加一个常数,最小生成树一定不变。
答案:正确(√)
1、为什么?
假设:
所有边:
全部
+100
2、例如:
原来:
1
3
5
变:
101
103
105
大小关系
有没有变?
没有。
因此:
Prim
Kruskal
每一步
选择边
完全一样。
所以:
MST不变。
3、注意:
这是
统一加同一个数。
如果:
不同边
加不同数字。
那就可能改变。
第9题
Prim和Kruskal得到的最小生成树权值一定一样。
答案:正确(√)
1、注意:
这里问的是:
总权值
不是:
树。
2、例如:
可能存在两棵不同MST
但是:
总代价
一定相同。
否则:
其中一个
就不是最小生成树了。
3、因此:
算法不同。
树可能不同。
权值一定相同。
第10题
递推DP和记忆化搜索时间复杂度总是相同。
答案:错误(×)
1、很多同学认为:
两者一样。
其实不是。
2、例如:
有100万个状态。
真正用到:
100个。
3、递推:
全部算。
1000000
状态。
4、记忆化:
只访问:
100
状态。
复杂度:
小得多。
5、所以:
不能说:
总是一样。
应该说:
很多经典DP
两者复杂度相近。
但:
并非所有问题都一样。
第二部分总结
| 1 | × | static成员 | 不属于对象,占用静态存储区 |
| 2 | √ | 二项式定理 | 系数和=2ⁿ |
| 3 | √ | const引用 | 可以绑定右值 |
| 4 | × | 最小生成树 | 唯一MST≠边权互异 |
| 5 | × | 快速排序 | 最坏O(n²) |
| 6 | × | 欧拉回路 | 还必须连通 |
| 7 | √ | ST表 | 预处理O(nlogn),查询O(1) |
| 8 | √ | 最小生成树 | 所有边统一加同一常数,MST不变 |
| 9 | √ | Prim/Kruskal | 树可能不同,但总权值一定相同 |
| 10 | × | 动态规划 | 记忆化搜索不一定与递推复杂度完全一致 |
本套判断题最值得记忆的八级考点:
① static 不属于对象。
② 二项式系数和 = 2ⁿ。
③ const 引用可以绑定右值。
④ 边权互异 ⇒ MST 唯一,但反过来不成立。
⑤ 快排最坏 O(n²)。
⑥ 欧拉回路 = 连通 + 所有点偶度。
⑦ ST 表:预处理 O(nlogn),查询 O(1)。
⑧ 所有边统一加同一个常数,MST 不变。
⑨ Prim 与 Kruskal 的最小生成树总权值一定相同。
⑩ 记忆化搜索与递推 DP 不一定总有相同时间复杂度。
网硕互联帮助中心













评论前必须登录!
注册