赞
踩
比如说数组{ 1, 2, 3, 4, 5 },右移2位,得到的结果应该是{4,5,1,2,3}
方法1:
- /// 数据arr右移k位
- /// </summary>
- /// <param name="arr"></param>
- /// <param name="k"></param>
- /// <returns></returns>
- public static int[] ArrayDisplacement(int[] arr, int k)
- {
- // 定义一个和原数组长度相同的新数组
- int[] newarr = new int[arr.Length];
-
- // 右移k位和右移k+arr.Length位是一样的
- k = k % arr.Length;
-
- // 数组内的元素全部右移k位
- for (int i = 0; i < arr.Length; i++)
- {
- // 当前元素右移k位尚未超出数组长度时,赋值给新数组i+k位,否则赋值给i + k - arr.Length
- if (i + k < arr.Length)
- {
- newarr[i + k] = arr[i];
- }
- else
- {
- newarr[i + k - arr.Length] = arr[i];
- }
- }
-
- return newarr;
- }
- /// 数组反转(从第下标m开始至下标n)
- /// </summary>
- /// <param name="arr"></param>
- /// <param name="m"></param>
- /// <param name="n"></param>
- public static void Reverse(ref int[] arr, int m, int n)
- {
- for (; m < n; m++, n--)
- {
- int t = arr[m];
- arr[m] = arr[n];
- arr[n] = t;
- }
- }
- int[] arr = { 1, 2, 3, 4, 5 };
- int k=2%arr.Length;
- Reverse(ref arr, 0, k);
- Reverse(ref arr, k+1, arr.Length-1);
- Reverse(ref arr, 0, arr.Length - 1);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。