文章
9
粉丝
0
获赞
0
访问
331
(1):采取遍历数组的方式,在遍历数组的过程中只访问奇数序号的,将起始元素视作第一个元素,即元素从1号开始编号,由于相同元素一定相邻,所以单个的元素一定会出现在奇数的位置,此时再去查看它与它之后的一个元素是否相同,若不相同则是要查找的元素。
int findOnly()
{
for(int i=1;i<=n;i+=2)//从第一个遍历到第n个元素
{
if(arr[i-1]!=arr[i])//由于元素下标从0开始,将个数减去1即是元素在数组中的位置
{
return arr[i-1];//找到则返回该元素
}
}
}
(3)算法总共会访问元素中一半的元素,为n/2,时间复杂度为O(n);
评分及理由
(1)得分及理由(满分3分)
得分:3分
理由:学生的设计思想与标准答案基本一致,虽然表述上略有不同(如提到“奇数序号”),但核心思路是正确的,即通过遍历并比较相邻元素来找到唯一出现的元素。
(2)得分及理由(满分8分)
得分:6分
理由:学生的代码实现基本正确,但存在以下问题:
1. 函数参数未定义(缺少数组和数组长度的参数),扣1分。
2. 循环条件中的变量`n`未定义,扣1分。
3. 未处理最后一个元素为目标元素的情况(如标准答案中的`return A[n-1]`),扣1分。
4. 代码逻辑正确,但实现细节不完整。
(3)得分及理由(满分2分)
得分:2分
理由:学生正确分析了算法的时间复杂度为O(n),与标准答案一致。
题目总分:3+6+2=11分
登录后发布评论
暂无评论,来抢沙发