C ++程序用于程序将数组循环旋转一
给定一个数组,将数组顺时针循环旋转一圈。
例子:
Input: arr[] = {1, 2, 3, 4, 5}
Output: arr[] = {5, 1, 2, 3, 4}
以下是步骤。
1) 将最后一个元素存储在变量 x 中。
2) 将所有元素向前移动一位。
3) 用 x 替换数组的第一个元素。
C++
// C++ code for program
// to cyclically rotate
// an array by one
# include
using namespace std;
void rotate(int arr[], int n)
{
int x = arr[n - 1], i;
for (i = n - 1; i > 0; i--)
arr[i] = arr[i - 1];
arr[0] = x;
}
// Driver code
int main()
{
int arr[] = {1, 2, 3, 4, 5}, i;
int n = sizeof(arr) /
sizeof(arr[0]);
cout << "Given array is
";
for (i = 0; i < n; i++)
cout << arr[i] << ' ';
rotate(arr, n);
cout << "
Rotated array is
";
for (i = 0; i < n; i++)
cout << arr[i] << ' ';
return 0;
}
// This code is contributed by jit_t
C++
#include
using namespace std;
void rotate(int arr[], int n)
{
int i = 0, j = n-1; // i and j pointing to first and last element respectively
while(i != j){
swap(arr[i], arr[j]);
i++;
}
}
// Driver code
int main()
{
int arr[] = {1, 2, 3, 4, 5}, i;
int n = sizeof(arr) /
sizeof(arr[0]);
cout << "Given array is \n";
for (i = 0; i < n; i++)
cout << arr[i] << " ";
rotate(arr, n);
cout << "\nRotated array is\n";
for (i = 0; i < n; i++)
cout << arr[i] << " ";
return 0;
}
输出
Given array is
1 2 3 4 5
Rotated array is
5 1 2 3 4
时间复杂度:O(n) 因为我们需要遍历所有元素
辅助空间:O(1)
上述问题也可以通过反转算法来解决。
另一种方法:
我们可以使用两个指针,比如i和j ,它们分别指向数组的第一个和最后一个元素。正如我们所知,在循环旋转中,我们会将最后一个元素放在第一个元素并向前移动其余元素,因此开始交换 arr[i] 和 arr[j] 并保持 j 固定并且 i 向 j 移动。重复直到 i 不等于 j。
C++
#include
using namespace std;
void rotate(int arr[], int n)
{
int i = 0, j = n-1; // i and j pointing to first and last element respectively
while(i != j){
swap(arr[i], arr[j]);
i++;
}
}
// Driver code
int main()
{
int arr[] = {1, 2, 3, 4, 5}, i;
int n = sizeof(arr) /
sizeof(arr[0]);
cout << "Given array is \n";
for (i = 0; i < n; i++)
cout << arr[i] << " ";
rotate(arr, n);
cout << "\nRotated array is\n";
for (i = 0; i < n; i++)
cout << arr[i] << " ";
return 0;
}
输出
Given array is
1 2 3 4 5
Rotated array is
5 1 2 3 4
有关详细信息,请参阅有关将数组循环旋转 1 的完整文章!