文章

62

粉丝

0

获赞

0

访问

9.7k

头像
2018年计算机学科专业基础综合试题 - 第41题回答
数据结构
发布于2025年11月3日 16:36
阅读数 92

(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作为标记数组,正确处理了正整数范围(1到n)内的值,并考...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发