**谁没交卷**
2026 华为OD机试真题 7月15日华为OD上机新系统考试真题 100 分题型
点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解
题目描述
张老师组织了一场线上模拟考试,并要求考生使用学号登录网站进行考试。考试完成后张老师发现试卷提交不全,他需要找到哪些同学没有交卷。
若班级内有 N 个学生,则学号从 1 开始到 N 结束,每个学生一个学号。一个班级内学生个数不超过 80,即 0<N≤80。
请你编写一个程序,帮助张老师快速找到哪些学号的学生没有交卷。
2026 华为OD机试真题 7月15日华为OD上机新系统考试真题 100 分题型
点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解
输入描述
- 班级内学生数量。
- 交卷学生的学号列表,由于是按照交卷时间排序的,学号是乱序的,同时本题确保学号是合法的,不存在小于 1 或大于 N 的学号。
输出描述
未交卷学生的学号列表,按照学号升序排列。
输出格式为列表形式:使用英文方括号,多个学号之间用英文逗号分隔,逗号后不加空格;如果所有学生都已交卷,输出 []。
示例1
输入
10
1,5,3,2,6,7,8,9,10
输出
[4]
说明
班级内共有 10 人,学号 1-10,学号为 4 的学生没有交卷,因此返回 4
示例2
输入
10
9,2,3,5,6,7
输出
[1,4,8,10]
说明
班级内共有 10 人,学号 1-10,学号为 1,4,8,10 的学生没有交卷,因此返回 1,4,8,10
示例3
输入
10
9,1,2,4,5,3,7,8,6,10
输出
[]
说明
有 10 人,学号 1-10,所有学生均进行了交卷,因此返回
[]。
解题思路
核心思想
学生学号范围固定为 1 到 N。将已经交卷的学号放入集合,然后从小到大枚举所有学号,凡是不在集合中的学号就是未交卷学生。
题目要求结果按学号升序排列,所以枚举顺序天然保证输出顺序,不需要再排序。
算法步骤
- 读取
N。 - 读取交卷学生学号列表,按逗号或空白解析出数字。
- 将交卷学生学号加入集合。
- 从
1到N依次判断每个学号是否在集合中。 - 将未出现的学号加入答案列表。
- 按
[a,b,c]的格式输出;若答案为空,输出[]。
复杂度分析
设学生数量为 N,交卷人数为 M。
时间复杂度:O(N+M),构建集合需要 O(M),枚举所有学号需要 O(N)。
空间复杂度:O(M),主要用于保存已交卷学