文章

63

粉丝

0

获赞

0

访问

3.2k

头像
2013年计算机学科专业基础综合试题 - 第41题回答
数据结构
发布于2025年10月23日 19:42
阅读数 64

1.由于ai的范围小于数组长度,因此可以用一个辅助数组统计序列A中各个元素出现的次数,然后再遍历查看辅助数组中的值是否存在大于长度一半的元素,有则输出这个元素的索引

2.

    public static int findMajor(int [] arr) {
        // 辅助数组
        int [] temp = new int[arr.length];
        for (int i = 0; i < arr.length; i++) {
            //序列中出现过的数的次数统计到辅助数组上
            temp[arr[i]]++;
        }
        for (int i = 0; i < arr.length; i++) {
            //遍历辅助数组中是否有主元素
            if(temp[i] > arr.length/2){
                return i;
            }
        }
        return -1;
    }

3.时间复杂度O(n),空间复杂度O(n)


评分及理由

(1)得分及理由(满分4分)

得分:4分

理由:学生提出的使用辅助数组统计元素出现次数,然后遍历查找是否存在出现次数超过n/2的元素,这个思路是正确的。虽然与标准答案的摩尔投票法不同,但题目要求"尽可能高效的算法",且学生的算法时间复杂度为O(n),满足要求。根据评分说明"思路正确不扣分",因此给满分。

(2)得分及理由(满分7分)

得分:7分

理由:学生用Java语言正确实现了算法,代码逻辑清晰。使用辅助数组temp统计每个元素出现次数,然后遍历temp数组查找主元素。代码实现正确,关键步骤有注释说明。虽然实现方法与标准答案不同,但算法正确且满足题目要求。

(3)得分及理由(满分2分)

得分:2分

理由:学生正确分析了算法的时间复杂度O(n)和空间复杂度O(n),与实现的算法一致。根据评分说明,时间复杂度与空间复杂度分析正确可各得1分。

题目总分:4+7+2=13分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发