我有這段代碼可以完美運行,但方向相反(左)我想將這個陣列向右旋轉,我該怎么做?
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]
uj5u.com熱心網友回復:
如果您只想將最后一個位置移動到第一個位置,您可以(錯誤)使用 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
uj5u.com熱心網友回復:
嘗試從后面迭代陣列:
注意:我將方法更改為,void因為從外觀上看,您無論如何都在嘗試就地解決方案。
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]
uj5u.com熱心網友回復:
如果您想走那條路線,這是使用 Linq 的單線。(注意:沒有錯誤檢查,但適用于至少有一個元素的陣列)。
本質上,您利用 Linq 獲取第一個 (N - 1) 個元素并添加最后一個元素。
var original = new int[] { 4,5,2,3 };
var rotated =
original
.Take(original.Length - 1)
.Prepend(
original.Last())
.ToArray();
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/473522.html
