题目描述
给你一个数组arr,请交换L–mid,mid+1–R之间的左右整体2部分,要求原地调整
题目解析
三次逆序完成
(1)左部分逆序
(2)右部分逆序
(3)整体逆序
void reverse(vector<int> &arr, int L, int R) {
while (L < R) {
std::swap(arr[L++], arr[R--]);
}
}
// [L..M]为左部分,[M+1..R]为右部分,左右两部分互换
void rotate(vector<int> &arr, int L, int M, int R) {
reverse(arr, L, M);
reverse(arr, M + 1, R);
reverse(arr, L, R);
}