📌  相关文章
📜  将1到N的数组中的所有奇数向右旋转,并将所有偶数向左旋转

📅  最后修改于: 2021-05-17 04:23:18             🧑  作者: Mango

给定由范围[1,N]中N个数字组成的置换数组A [] ,任务是左旋转该置换的所有偶数,右旋转置换的所有奇数,并打印更新的置换。
注意: N始终为偶数。
例子:

方法:

  1. 显然,奇数元素总是在偶数索引上,而偶数元素总是在奇数索引上。
  2. 要进行偶数的左旋转,我们仅选择奇数索引。
  3. 要对奇数进行右旋转,我们仅选择偶数索引。
  4. 打印更新的数组。

下面是上述方法的实现:

C++
// C++ program to implement
// the above approach
#include
using namespace std;
 
// function to left rotate
void left_rotate(int arr[])
{
    int last = arr[1];
    for (int i = 3; i < 6; i = i + 2)
    {
        arr[i - 2] = arr[i];
    }
    arr[6 - 1] = last;
}
 
// function to right rotate
void right_rotate(int arr[])
{
    int start = arr[6 - 2];
    for (int i = 6- 4; i >= 0; i = i - 2)
    {
        arr[i + 2] = arr[i];
    }
    arr[0] = start;
}
 
// Function to rotate the array
void rotate(int arr[])
{
    left_rotate(arr);
    right_rotate(arr);
    for (int i = 0; i < 6; i++)
    {
        cout << (arr[i]) << " ";
    }
}
 
// Driver code
int main()
{
    int arr[] = { 1, 2, 3, 4, 5, 6 };
 
    rotate(arr);
}
 
// This code is contributed by rock_cool


Java
// Java program to implement
// the above approach
 
import java.io.*;
import java.util.*;
import java.lang.*;
 
class GFG {
 
    // function to left rotate
    static void left_rotate(int[] arr)
    {
        int last = arr[1];
        for (int i = 3;
            i < arr.length;
            i = i + 2) {
            arr[i - 2] = arr[i];
        }
        arr[arr.length - 1] = last;
    }
 
    // function to right rotate
    static void right_rotate(int[] arr)
    {
        int start = arr[arr.length - 2];
        for (int i = arr.length - 4;
            i >= 0;
            i = i - 2) {
            arr[i + 2] = arr[i];
        }
        arr[0] = start;
    }
 
    // Function to rotate the array
    public static void rotate(int arr[])
    {
        left_rotate(arr);
        right_rotate(arr);
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }
 
    // Driver code
    public static void main(String[] args)
    {
        int arr[] = { 1, 2, 3, 4, 5, 6 };
 
        rotate(arr);
    }
}


Python3
# Python3 program for the above approach
 
# Function to left rotate
def left_rotate(arr):
     
    last = arr[1];
    for i in range(3, len(arr), 2):
        arr[i - 2] = arr[i]
         
    arr[len(arr) - 1] = last
 
# Function to right rotate
def right_rotate(arr):
     
    start = arr[len(arr) - 2]
    for i in range(len(arr) - 4, -1, -2):
        arr[i + 2] = arr[i]
         
    arr[0] = start
 
# Function to rotate the array
def rotate(arr):
     
    left_rotate(arr)
    right_rotate(arr)
    for i in range(len(arr)):
        print(arr[i], end = " ")
 
# Driver code
arr = [ 1, 2, 3, 4, 5, 6 ]
 
rotate(arr);
 
# This code is contributed by sanjoy_62


C#
// C# program to implement
// the above approach
using System;
 
class GFG{
 
// Function to left rotate
static void left_rotate(int[] arr)
{
    int last = arr[1];
    for(int i = 3;
            i < arr.Length;
            i = i + 2)
    {
        arr[i - 2] = arr[i];
    }
    arr[arr.Length - 1] = last;
}
 
// Function to right rotate
static void right_rotate(int[] arr)
{
    int start = arr[arr.Length - 2];
    for(int i = arr.Length - 4;
            i >= 0; i = i - 2)
    {
        arr[i + 2] = arr[i];
    }
    arr[0] = start;
}
 
// Function to rotate the array
public static void rotate(int[] arr)
{
    left_rotate(arr);
    right_rotate(arr);
     
    for(int i = 0; i < arr.Length; i++)
    {
        Console.Write(arr[i] + " ");
    }
}
 
// Driver code
public static void Main()
{
    int[] arr = { 1, 2, 3, 4, 5, 6 };
 
    rotate(arr);
}
}
 
// This code is contributed by chitranayal


Javascript


输出:
5 4 1 6 3 2

时间复杂度: O(N)
辅助空间: O(1)