题目大意是:指定数组右移,只能在数组内,不能用另外的数组。最少移动次数,如何设计。
比如数组{1,2,3,4,5,6,7},右移后排序为{7,6,5,4,3,2,1}
目前想到的最好的方法是,第一位和最后一位互换,第二位和倒数第二位互换,以此类推。数组个数为奇数时,中间的不用动,所以循环的次数就是(数组个数/2)的整数位
代码如下
/// <summary>
/// 数组逆序排列
/// </summary>
/// <param name="digit">数组</param>
public int[] SetSequence(int[] digit)
{
int count = digit.Count();
if (count <= 0) return null;
int k = (count % 2) == 1 ? ((count - 1) / 2) : (count / 2);
for (int i = 0; i < k; i++)
{
int t1 = digit[i];
int t2 = digit[count - 1 - i];
digit[i] = t2;
digit[count - 1 - i] = t1;
}
foreach (int item in digit)
{
Console.WriteLine(item);
}
return digit;
}
调用后输出结果:
int[] t = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
SetSequence(t);
不管数组右移或左移几位,先将数组排序好之后,逆序获得。
移动的位数k=k%数组.Count();
如果是abcd1234–》1234abcd,
则先应该abcd1234–》dcba4321–》1234abcd
这是我目前想到的最少次数的方法了,如果思路有误或者大家有更好的方法,欢迎交流和指正。