文章
9
粉丝
0
获赞
0
访问
377
(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分)
得分:2分
理由:学生的设计思想基本正确,但表述不够清晰。学生提到“访问奇数序号的元素”,但未明确说明是从0开始还是1开始计数,容易引起混淆。此外,学生未明确说明如果遍历完所有偶数对后仍未找到目标元素,最后一个元素即为目标元素的情况。
(2)得分及理由(满分8分)
得分:6分
理由:学生的代码实现基本正确,但存在以下问题:
i<=n
,可能导致数组越界访问。代码逻辑与设计思想一致,但实现细节不够完善。
(3)得分及理由(满分2分)
得分:2分
理由:学生正确分析了时间复杂度为O(n),与标准答案一致。
题目总分:2+6+2=10分
登录后发布评论
暂无评论,来抢沙发