文章
25
粉丝
0
获赞
0
访问
2.0k
(1)从a_0开始,遍历数组偶数下标的元素,由于相同的元素一定相邻,所以如果这个元素出现了两次,下一个元素和当前元素是相等的;如果只出现一次,和后面一个元素不会相等。因此一次遍历即可找出这个只出现一次的元素。
(2)int getSingleNum(int a[], int n){
//a 为给定数组,n为数组长度
for(int i = 0; i < n; i+=2){
if (a[i] != a[i+1]) return a[i];
}
return -1; //若输入数据合法,不会执行到这一步
}
(3)遍历一次数组,时间复杂度为O(n),n为数组长度。
评分及理由
(1)得分及理由(满分3分)
学生答案正确描述了算法的基本设计思想:遍历偶数下标元素,与后一个元素比较,若不相等则返回当前元素。该思路与标准答案一致,得3分。
(2)得分及理由(满分8分)
学生代码整体正确,但存在一处逻辑错误:循环条件为i < n
,当i
为n-1
(最后一个元素)时,a[i+1]
会越界访问。标准答案中循环条件为i < n-1
,避免了越界。此外,学生代码未处理目标元素是最后一个元素的情况(例如输入数组长度为奇数且目标在末尾),但标准答案通过return A[n-1]
处理了该情况。学生代码返回-1,但题目要求返回目标元素,因此存在缺陷。扣2分(逻辑错误)。代码注释和结构合理,其余部分正确,得6分。
(3)得分及理由(满分2分)
学生正确分析了时间复杂度为O(n),与标准答案一致,得2分。
题目总分:3+6+2=11分
登录后发布评论
暂无评论,来抢沙发