文章

156

粉丝

195

获赞

0

访问

28.4k

头像
2025 年 5 月第 1 次 408 月考试卷 - 第41题回答
数据结构
发布于2025年11月20日 16:44
阅读数 403

(1) 基本思想:利用相同元素相邻的特性,使用二分查找,每次比较中间偶数位置与其下一位置的值,相等则单独元素在右,否则在左。

(2) 

int findSingle(int arr[], int n) {
    int low = 0, high = n - 1;
    while (low < high) {
        int mid = low + (high - low) / 2;
        // 保证 mid 是偶数下标,这样 arr[mid] 是某对的第一项
        if (mid % 2 == 1) {
            mid--;
        }
        // 检查 mid 和 mid+1 是否相等
        if (arr[mid] == arr[mid + 1]) {
            // 前面都是成对的,单独元素在右边
            low = mid + 2;
        } else {
            // 单独元素在左边(包括 mid)
            high = mid;
        }
    }
    return arr[low];
}

(3) 时间复杂度:O(log⁡n)O(logn)。


评分及理由

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

得分:3分

理由:学生的基本设计思想正确,利用了相同元素相邻的特性,并提出了二分查找的思路。虽然与标准答案的顺序遍历方法不同,但思路正确且高效,符合题目要求,因此不扣分。

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

得分:8分

理由:学生实现了二分查找算法,代码逻辑正确。通过调整mid为偶数下标,确保比较的是同一对元素,然后根据arr[mid]与arr[mid+1]是否相等来缩小查找范围。代码注释清晰,关键步骤有解释,符合题目要求,没有逻辑错误。

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

得分:2分

理由:学生正确分析了算法的时间复杂度为O(log n),与二分查找的特性一致,且比标准答案的O(n)更高效,符合题目要求。

题目总分:3+8+2=13分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发