文章

12

粉丝

0

获赞

0

访问

1.2k

头像
2010年计算机学科专业基础综合试题 - 第42题回答
数据结构
发布于2025年9月18日 22:02
阅读数 10

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...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发