gpt4 book ai didi

c# - 对大小为 n 的数组进行左旋转操作

转载 作者:太空宇宙 更新时间:2023-11-03 19:39:43 25 4
gpt4 key购买 nike

我尝试在大小为 n 的数组上实现左旋转。例如,我有

array = {1,2,3,4,5};

我有类次数:

shifts = 2;

处理数组后,它必须如下所示:

array = {3,4,5,1,2};

我用两个 for 循环实现了它:

var array = new int[]{1,2,3,4,5};
var shifts =3;
var temp = 0;
for(var j = 0; j < shifts; j++){
temp = array[0];
for(var i = 0; i < array.Length -1; i++){
array[i] = array[i + 1];
}
array[array.Length-1] = temp;
}
for(var i =0 ; i< array.Length; i++){
System.Console.Write(array[i]+ " ");
}
Console.Read();

它正在工作,但它没有通过一些数组中有大量数字的测试,我得到了因超时而终止错误;

有没有办法在一个循环中实现左旋转?

最佳答案

我认为这与就地旋转数组一样高效。适用于左右旋转,具体取决于 rotateBy 的符号:

private static void Rotate<T>(T[] array, int rotateBy)
{
rotateBy %= array.Length;
// Nothing to do?
if (rotateBy == 0)
return;
// Normalize it to a right rotation
if (rotateBy < 0)
rotateBy = array.Length + rotateBy;
// Allocate the smallest possible temp array
if (rotateBy > array.Length / 2)
{
T[] temp = new T[array.Length - rotateBy];
Array.Copy(array, 0, temp, 0, array.Length - rotateBy);
Array.Copy(array, array.Length - rotateBy, array, 0, rotateBy);
Array.Copy(temp, 0, array, rotateBy, array.Length - rotateBy);
}
else
{
T[] temp = new T[rotateBy];
Array.Copy(array, array.Length - rotateBy, temp, 0, rotateBy);
Array.Copy(array, 0, array, rotateBy, array.Length - rotateBy);
Array.Copy(temp, 0, array, 0, rotateBy);
}
}

关于c# - 对大小为 n 的数组进行左旋转操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55354527/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com