给定n个整数组成的数组,将该数组循环左移m位后输出。例如,一个长度为 10 的数组中原来的元素为0 1 2 3 4 5 6 7 8 9,则循环左移 3 个位置后元素的顺序为 3 4 5 6 7 8 9 0 1 2。C++
时间: 2023-12-27 19:04:49 浏览: 207
有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数.
以下是一个简单的 C++ 实现:
```cpp
#include <iostream>
using namespace std;
void reverse(int arr[], int start, int end) {
while (start < end) {
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start++;
end--;
}
}
void leftRotate(int arr[], int n, int d) {
d %= n;
reverse(arr, 0, d - 1);
reverse(arr, d, n - 1);
reverse(arr, 0, n - 1);
}
int main() {
int n, m;
cout << "Enter size of array: ";
cin >> n;
int arr[n];
cout << "Enter array elements: ";
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
cout << "Enter number of rotations: ";
cin >> m;
leftRotate(arr, n, m);
cout << "Rotated array: ";
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
```
该代码使用了三次数组反转操作,其中第一次反转前 d 个元素,第二次反转剩下的 n-d 个元素,最后一次反转整个数组。这个算法的时间复杂度为 O(n)。
示例输入输出:
```
Enter size of array: 10
Enter array elements: 0 1 2 3 4 5 6 7 8 9
Enter number of rotations: 3
Rotated array: 3 4 5 6 7 8 9 0 1 2
```
阅读全文