文章
19
粉丝
0
获赞
0
访问
665
(1)
设计策略:
利用数组的“逆转”操作,通过三次逆转实现整体左移,避免多次移动元素,提升效率。
具体步骤:
n−P
个元素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)得分及理由(满...
登录后发布评论
暂无评论,来抢沙发