----------------------2019/1/28---------------------
No extra space allowed ? isn't using int[] arr considered extra space. If we are anyway using arr[] why not copy from k instead of doing mod
Although extra space ,but efficiency is very high!
public class Solution {
public void Rotate(int[] nums, int k) {
if(nums == null || nums.Length < 2 || k == 0)
return;
int [] arr = new int[nums.Length];
int n = nums.Length;
for(int i = 0;i < nums.Length;i++){
arr[(i + k) % n] = nums[i];
}
arr.CopyTo(nums , 0);
}
}
----------------------2019/1/28---------------------
看了旋转的步骤就很明显了,每次只需要移动一个位置到最前面。 ————经过验证,真的不是一般的麻烦,请舍弃。
天了噜——原来这样更容易:
方法一:建一个list<int> 追加两段内容输出即可。(临时空间)
static void Main(string[] args)
{
int[] tst = new int[] { 1, 2, 3, 4, 5, 6 };
int t = 2;
List<int> tstt= ReturnU(tst, t);
for (int i = 0; i < tst.Length; i++)
{
Console.WriteLine(tstt[i]);
}
Console.ReadKey();
}
public static List<int> ReturnU(int[] nums, int count)
{
//新建一个数组将数组倒序存入count个值。
List<int> list = new List<int>();
for (int j = nums.Length - 1; j > nums.Length - (nums.Length - count-1); j--)
{
list.Add(nums[j]);
}
//将剩下的内容填充到数组
for (int i = 0; i < nums.Length-count; i++)
{
list.Add(nums[i]);
}
return list;
}
那么问题来了,既然叫做旋转数组,就不能“背道而驰”否则偏离了出题者想要考察的内容。
方法二: 旋转数组 --先起个响亮点的名字,假装自己已经做出来了,并且答案如下。
当我抬头仰望星空的那一霎那,我看见一只5毫米长的蚊子飞了进来,我眼眶突然湿润了,因为我知道了答案。题目就在答案,带我在vs上去实现。(无厘头)
做了好久,终于做出来了,利用Array.Reverse() 这个反转的函数。
//旋转数组方式二:翻转数组
public static void ReturnUs(int[] nums, int count)
{
Array.Reverse(nums, nums.Length - count, nums.Length - (nums.Length - count));//翻转尾巴
Array.Reverse(nums, 0, nums.Length - count);//翻转头
Array.Reverse(nums); //翻身
}