文章
3
粉丝
0
获赞
0
访问
392
1、使用Hash映射表,构建一个Hash数组B【n】,逐个遍历A中的元素,然后每次元素出现一次,则对应的B【A【i】】++。最后遍历数组B,找出值为1的对应下标则为目标仅出现一次的元素。
2、
int func(int A [],int n){
int B[n+2];
for(int i=0;i<n+2;i++) B[i]=0;
for(int i=0;i<n;i++){
B[A[i]]++;//遍历A,A出现的元素则在B中对应的下标加1
}
for(int i=0;i<n;i++){
if(B[i]==1) printf(i,"仅出现一次的元素:&i",end="\n")
}
}
3、3个并列的循环,每个循环运行次数为n,时间复杂度O(n)
创建了一个长度为n的Hash数组,空间复杂度O(n)
评分及理由
(1)得分及理由(满分3分)
得分:1分
理由:学生的设计思想虽然正确,但不符合题目要求的“时间上尽可能高效的算法”。题目中明确说明“相同元素一定相邻”,可以利用这一特性设计更高效的算法(如标准答案中的直接比较法),而Hash映射表的方法虽然可行,但未利用题目给出的关键条件,效率较低。
(2)得分及理由(满分8分)
得分:4分
理由:
printf(i,"仅出现一次的元素:&i",end="\n")
格式不正确,应为 printf("仅出现一次的元素:%d\n", i);
。int
,但未返回目标元素的值。(3)得分及理由(满分2分)
得分:1分
理由:学生正确分析了时间复杂度为O(n),但未说明空间复杂度为O(n)(虽然题目未明确要求,但标准答案的算法空间复杂度为O(1),因此扣1分。
题目总分:1+4+1=6分
登录后发布评论
暂无评论,来抢沙发