文章

19

粉丝

0

获赞

0

访问

665

头像
2010年计算机学科专业基础综合试题 - 第42题回答
数据结构
发布于2025年6月19日 19:33
阅读数 3

(1)

设计策略:
利用数组的“逆转”操作,通过三次逆转实现整体左移,避免多次移动元素,提升效率。

  • 具体步骤:

    1. 将数组整体逆转
    2. 逆转前 n−P 个元素
    3. 逆转后 P 个元素
  • 理由:
    通过逆转,能在原地完成左移,且只需常数空间(返回后即使多次逆转,空间成本也很低),时间复杂度为 O(n)。

(2)

#include <iostream>
#include <vector>
using namespace std;

// 函数:逆转数组的部分区域
void reverse(vector<int>& R, int start, int end) {
    while (start < end) {
        swap(R[start], R[end]);
        start++;
        end--;
    }
}

// 函数:循环左移 P 位(原地操作)
void leftRotate(vector<int>& R, int P) {
    int N = R.size();
    P = P % N; // 防止P大于N
    // 第一步:整体逆转
    reverse(R, 0, N - 1);
    // 第二步:逆转前 N - P 个元素
    reverse(R, 0, N - P - 1);
    // 第三步:逆转后 P 个元素
    reverse(R, N - P, N - 1);
}

 (3)时间复杂度O(n)每个逆转操作最多遍历数组元素,至多三次,线性时间。

空间复杂度O(1)只使用常数额外空间(swap和指针变量)。


评分及理由

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

得分:3分

理由:学生的设计思想基本正确,但逆转顺序与标准答案不同(标准答案先逆转前P个元素,再逆转后N-P个元素,最后整体逆转)。虽然思路正确且能实现目标,但步骤描述不够准确,扣1分。

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

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发