文章
60
粉丝
6
获赞
0
访问
6.6k
(1)利用二分的方法,
利用分治法的二分思想,每次根据中间元素的配对情况判断唯一元素所在区间: 偶数索引检查:若中间索引为偶数,比较其与下一位置的元素。若相同,则唯一元素在右侧;否则在左侧。 奇数索引调整:若中间索引为奇数,则退一位使其变为偶数,再按上述规则判断。 递归终止条件:当区间长度为1时,该元素即为唯一值。
(2)
int findSingle(int A[], int n) {
int left = 0, right = n - 1;
while (left < right) {
int mid = left + (right - left) / 2;
if (mid % 2 == 1) mid--; // 确保mid为偶数
if (A[mid] == A[mid + 1]) {
left = mid + 2; // 唯一元素在右侧
} else {
right = mid; // 唯一元素在左侧
}
}
return A[left];
}
(3)复杂度o(logn)
评分及理由
(1)得分及理由(满分3分)
得分:3分
理由:学生的设计思想虽然与标准答案不同,但利用了二分查找的思想,能够正确解决问题,且时间复杂度更低(O(logn))。思路正确且高效,符合题目要求。
(2)得分及理由(满分8分)
得分:8分
理由:学生的代码实现正确,逻辑清晰,关键步骤(如确保mid为偶数、比较A[mid]与A[mid+1])处理得当,注释虽未明确写出,但代码逻辑自明。与设计思想一致,能够高效解决问题。
(3)得分及理由(满分2分)
得分:2分
理由:学生正确分析了算法的时间复杂度为O(logn),与标准答案的O(n)不同,但因其算法设计更高效,分析正确,故不扣分。
题目总分:3+8+2=13分
登录后发布评论
暂无评论,来抢沙发