文章

79

粉丝

0

获赞

0

访问

3.6k

头像
2018年计算机学科专业基础综合试题 - 第41题回答
数据结构
发布于2025年9月19日 21:24
阅读数 99

1)使用哈希表进行存储,将数组遍历一次,把相应的元素作为key存放到哈希表里,然后相应位置的值+1,例如创建数组hash_min[], 数组{-5, 3, 2, 3},可以将大于0的元素,例如3,放进hash_min[3]++。接着遍历hash_min,找到第一个为0的key,那个就是最小未出现正整数。

2) 见下代码

3)O(n)时间复杂度, O(n)空间复杂度

#define MAXINT 2147485555 // 假设为int最大值
int findSmallest(int nums[], int size){
  int res = 0;
  int hash_min[MAXINT];
  for(int i = 0; i< size; ++i){
    if(nums[i] >= 0) hash_min[nums[i]]++;
  }
  
  for(int i = 0; i < MAXINT; ++i){
    if(hash_min[i] == 0){
      res = i+1;
      break;
    }else  res++;
  }
  return res+1;
}

评分及理由

(1)得分及理由(满分3分)

得1分。学生提出了使用哈希表存储的基本思想,这确实是解决该问题的一种可行方法。但是,该设计存在严重缺陷:哈希表的大小被设置为MAXINT(2147485555),这在实际应用中是不可行的,因为数组大小n可能远小于这个值,导致巨大的空间浪费。此外,算法没有正确处理正整数范围(应为1到n或n+1),且未考虑负数和零的处理。虽然思路正确,但设计不切实际,因此扣2分。

(2)得分及理由(满分8分)

得2分。代码实现了哈希表的思想,但存在多个逻辑错误:
- 哈希表数组`hash_min`的大小为MAXINT,这会导致栈溢出或内存分配失败,因为MAXINT过大(2分扣分)。
- 代码未初始化`hash_min`数组,其初始值不确定,可能导致错误(1分扣分)。
- 遍历哈希表时,从i=0开始,但最小正整数应从1开始检查(i=0对应正整数0,但题目要求最小正整数从1开始)(1分扣分)。
- 结果计算错误:当找到第一个`hash_min[i] =...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发