文章

4

粉丝

0

获赞

0

访问

222

头像
2025 年 5 月第 1 次 408 月考试卷 - 第41题回答
数据结构
发布于2025年6月21日 15:16
阅读数 72

1. 设有3个指针i,j,k分别指向当前元素的前一个元素、当前元素、下一个元素。若前一个元素或后一个元素与当前元素相等,则三个指针同时向后移动一次;若两者与当前元素都不相等,则找到进仅出现一次的元素,即j指向的元素。
 

2. 

int find(SeqList &l) {
  int i = 1, j = 2, k = 3;
  while (j <= l.length) {
    int ie = l.data[i], je = l.data[j];
    if (k > l.length) { return je; }
    int ke = l.data[k];
    if (ie != je && ke != je) return je;
    i++;
    j++;
    k++;
  }
  return -1;
}

3. 该算法只从头到尾遍历一遍所给序列,时间复杂度为O(n)


评分及理由

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

得分:3分

理由:学生的设计思想虽然与标准答案不同,但逻辑正确。通过三个指针比较当前元素与前后的关系,能够有效找到仅出现一次的元素。

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

得分:6分

理由:代码实现基本正确,但存在以下问题:

  • 指针初始化不正确(i=1, j=2, k=3),可能导致数组越界或遗漏第一个元素的检查。
  • 未处理边界情况(如序列长度为1时)。
  • 代码注释缺失,关键逻辑未说明。

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

得分:2分

理由:时间复杂度分析正确,与标准答案一致。

题目总分:3+6+2=11分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发