手写std::rotate
手写std::rotate
std::rotate
接受三个参数l, mid, r.将输入数组进行翻转。
将[l, mid)和[mid, r)位置互换。
输入[1, 2, 3, 4, 5](下标从零开始)
经过rotate(0, 3, 5)之后,数组变为:
[4, 5, 1, 2, 3]
手动实现
将[l, r]与[r+1, k]互换位置(即把[l,r]插入到k的后面)
void swapSubarrays(vector<char>& q, int l, int r, int k) {
// 1. 备份原始数据
vector<char> backup = q;
// 2. 移动绿色部分 [r+1, k] 到位置 l
int y = l;
for (int x = r + 1; x <= k; x++, y++) {
q[y] = backup[x];
}
// 3. 移动红色部分 [l, r] 到后续位置
for (int x = l; x <= r; x++, y++) {
q[y] = backup[x];
}

浙公网安备 33010602011771号