文章
21
粉丝
0
获赞
0
访问
273
(1)定义三个指针,每次处理完毕后,三个指针依次相加,每当出现最短距离时,便更新对应的|a-b|,|b-c|,|c-a|的值
(2)
int window=3;//定义窗口大小
int p1=0;int p2=0;int p3=0;//s1,s2,s3三指针
int ans=9999;
while(window!=0)
{
h1=abs(s1[p1]-s2[p2]);if(h1>pivot&&p1<s1.size())p1++;continue;
h2=abs(s2[p1]-s3[p3]);if(h2+h1>pivot&&p2<s2.size())p1++;continue;
h3=abs(s3[p3]-s1[p1]);if(h1+h2+h3>pivot&&p3<s3.size())continue;
pivot=h1+h2+h3;
if(p1==s1.size()&&p2==s2.size()&&p3==s3.size())break;
}
cout<<pivot;
(3)由于是仅对所有三元组的每个序列遍历一次,故时间复杂度为o(n),空间复杂度为o(1)
评分及理由
(1)得分及理由
得分:1分
理由:学生的基本设计思想描述较为模糊,没有明确说明指针移动的具体规则(如每次移动最小值指针),且未提及如何保证遍历所有可能的三元组。虽然提到了指针和距离更新,但缺乏关键细节,因此扣2分。
(2)得分及理由
得分:3分
理由:代码存在多处逻辑错误:
1. 窗口大小定义无意义(`window=3`未使用)。
2. 指针移动逻辑错误(如`h2`计算中误用`p1`而非`p2`,且`continue`导致后续代码无法执行)。
3. 条件判断不完整(如未处理指针越界时的终止条件)。
4. 变量未定义(如`h1`, `h2`, `h3`, `pivot`)。
5. 输出部分未正确返回最小距离(`pivot`未初始化且逻辑混乱)。
因代码框架勉强体现多指针思想,但实现错误严重,扣5分。
(3)得分及理由
得分:0分
理由:时间复杂度分析...
登录后发布评论
暂无评论,来抢沙发