文章
62
粉丝
0
获赞
0
访问
9.7k
(1)
因为至多只有n个数,故未出现最小正整数的最大为n+1,因此使用bool数组used[n+1],used[i]记录数字i是否出现过,不在记录范围内的数字直接跳过。
(2)
int Solve(vector<int> &a)
{
int n = a.size();
vector<bool>used(n + 2, false);
for(auto &value : a) {
// 如果数字在记录范围内,则通过used记录value出现过
if (value > 0 && value <= n)
used[value] = true;
}
for(int i = 1; i <= n + 1; i++) {
// 从最小正整数1开始遍历,直到找到第一个未记录的最小正整数
if (!used[i])
return i;
}
}
(3)
时间复杂度O(n),空间复杂度O(n)。
评分及理由
(1)得分及理由(满分3分)
得分:3分
理由:学生的基本设计思想正确。通过使用一个辅助布尔数组记录1到n范围内出现的正整数,然后从1开始遍历找到第一个未出现的正整数。思路清晰,与标准答案的哈希标记法虽然实现方式不同,但都是正确的解法,且时间复杂度相同。
(2)得分及理由(满分8分)
得分:8分
理由:算法实现正确,代码逻辑清晰。使用vector
登录后发布评论
暂无评论,来抢沙发