文章
7
粉丝
0
获赞
0
访问
481
1. 基本设计思想:采用双指针的方法,第一个指针p指向一个连续元素块的左边界,第二个指针q指向其右边界,每次让q移动,若出现A[p]!=A[q]的情况,则计算此时的q-p是否等于1,若等于1,者返回nums[q],否则领p=q,继续移动q。重复以上操作直到找到目标元素。
2. 代码实现
int Solution(int A[],int n){
int p=0,q=0;
while(q<n){
if(A[p]!=A[q])//如果两个边界元素不等,则计算[p,q)中元素的个数
if(p-q==1) return A[p];//个数为1,者A[p]为目标元素
else p=q;
q++;
}
//最后一个元素为目标元素的情况
return A[q];
}
3. 时间复杂度为O(n)
评分及理由
(1)得分及理由(满分3分)
得分:3分
理由:学生的设计思想虽然与标准答案不同,但思路正确且能够解决问题。双指针的方法同样可以高效地找到仅出现一次的元素,因此不扣分。
(2)得分及理由(满分8分)
得分:6分
理由:代码实现存在逻辑错误。在判断条件中,`if(p-q==1)`应为`if(q-p==1)`,否则逻辑错误。此外,最后返回`A[q]`会导致数组越界,应为`A[p]`或`A[n-1]`。由于代码逻辑错误,扣2分。
(3)得分及理由(满分2分)
得分:2分
理由:时间复杂度分析正确,为O(n),与标准答案一致,因此不扣分。
题目总分:3+6+2=11分
登录后发布评论
暂无评论,来抢沙发