文章
12
粉丝
0
获赞
0
访问
1.2k
1.反转前p个元素,将数组R[0]到R[p-1]反转,然后反转剩下的 从R[p]到R[n-1],最后反转整个数组 ,从R[0]到R[n-1]
2.void reverse (int R[],int left,int right){
while(left<right){
int temp=R[left];
R[left]=R[right];
R[right]=temp;
left++;
right--;
}
}
//循环左移p位
void leftRotate(int R[],int n ,int p){
if(p==0 || p== n) return; //无需移动
reverse (R, 0 ,p-1); //反转前p个
reverse(R,p,n-1); //反转剩余部分
reverse(R,0,n-1);//反转整个数组
}
3此算法时间复杂度为O(n),空间复杂度为O(1);
评分及理由
(1)得分及理由(满分4分)
学生给出的基本设计思想与标准答案完全一致,即通过三次反转实现循环左移:先反转前p个元素,再反转剩余元素,最后反转整个数组。思路正确且表述清晰。得4分。
(2)得分及理由(满分7分)
学生使用C语言实现了算法,包括reverse函数和leftRotate函数。reverse函数使用双指针法实现反转,效率与标准答案相同(时间复杂度O(n/2))。leftRotate函数正确调用三次reverse,并处理了边界情况(p=0或p=n...
登录后发布评论
暂无评论,来抢沙发