文章
100
粉丝
0
获赞
0
访问
12.5k
(1)思想:用一个长度为n+2的数组b,来存储该数组里的正整数的出现情况,用1表示存在,0表示不存在。遍历数组b,第一次出现0,即该索引(不为0)即未出现的最小正整数。
步骤:1.假设该数组为a = {-5,2,3},声明一个长度为4的数组b;
2.则b = {0,0,1,1,0};3.遍历b,b[1] = 0 ,所以未出现的正整数为1.
(2)
int f(int a[],int n){
int *b = (int *)malloc(sizeof(int)*(n+2)); //声明长度为n+2的数组
memset(b,0,sizeof(int)*(n+2)); //将b数组内的元素全部初始化为0
int i=0, result;
for(i=0;i<n;i++){ //用数组b存储数组a出现的正整数的情况
if(b[a[i]]==0){
b[a[i]] = 1;
}
}
for(i = 1;i<n+2;i++){ //遍历数组b,第一次出现0的索引即为结果
if(b[i]==0){
result = i;
break;
}
}
free(b);
return result; //返回结果
}
(3)时间复杂度:O(n) 空间复杂度:O(n)
评分及理由
(1)得分及理由(满分3分)
得分:3分
理由:学生的设计思想与标准答案不同,但思路正确且清晰。通过使用辅助数组来标记正整数的出现情况,能够有效解决问题。因此不扣分。
(2)得分及理由(满分8分)
得分:7分
理由:学生的代码实现了其设计思想,但存在以下逻辑错误:
因此扣1分。
(3)得分及理由(满分2分)
得分:2分
理由:学生正确分析了算法的时间复杂度和空间复杂度,与标准答案一致,因此不扣分。
题目总分:3+7+2=12分
登录后发布评论
暂无评论,来抢沙发