我怎样才能旋转这个数组?

How can I rotate this array?

我的代码运行良好,但方向相反(左)我想将此数组向右旋转,我该怎么做?

 public int[] RotateArray(int[] A) {
    for(int i = 0 ;i < A.Length - 1;i++)
    {
       int aux = A[i+1];
       A[i+1] = A[i];
       A[i] = aux;

       // Aux = A[i];
    }
    return A;
}

我得到的结果:

[4,5,2,3] => [5,2,3,4]

想要的结果:

[4,5,2,3] => [3,4,5,2]

尝试从后面遍历数组:

注意:我将方法更改为 void,因为从它的外观来看,您无论如何都在尝试 in-place 解决方案.

using System; 

public class Program {
    public static void RotateArray(int[] A) {
        if (A == null || A.Length <= 1) {
            return;
        }
        int lastElement = A[A.Length - 1];
        for (int i = A.Length - 1; i > 0; i--) {
            A[i] = A[i - 1];
        }
        A[0] = lastElement;
    }

    public static void Main(string[] args) {
        int[] array = new int[] { 4, 5, 2, 3 };
        Console.WriteLine("Before: [{0}]", string.Join(", ", array));
        RotateArray(array);
        Console.WriteLine("After: [{0}]", string.Join(", ", array));
    }
}

输出:

Before: [4, 5, 2, 3]
After: [3, 4, 5, 2]

如果您只想将最后一个位置移到第一个位置,您可以(错误)使用 Array.Copy,源和目标引用同一个数组。

int[] arr = { 4, 5, 2, 3 };
var last = arr[^1];
Array.Copy(arr, 0, arr , 1, arr.Length -1);
arr[0] = last; // -> now 3, 4, 5, 2

这里是 one-liner 使用 Linq 如果你想走那条路。 (注意:没有错误检查,但适用于至少包含一个元素的数组)。

本质上,您利用 Linq 获取前 (N - 1) 个元素并添加最后一个元素。

var original = new int[] { 4,5,2,3 };

var rotated = 
    original
    .Take(original.Length - 1)
    .Prepend(
        original.Last())
    .ToArray();