
问题:
如何把一个数组循环右移K位 如:12345678 右移2位 78123456
思路一:写一个方法,让数组右移一位,要求右移几位就调用多少次
思路二:我们先将数组分成两部分, 设后面K位为数组b, 前面length()-K位为数组a, 那么怎么数组的组成就是ab.原始数组是ab, 我的目的是将这个数组变成ba
第一步:将整个长度为N的数组倒置得到$b^{-1}$ $a^{-1}$
第二步:将$b^{-1}$数组和$a^{-1}$ 数组分别倒置, 得到 ba数组.
具体代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
import java.util.Arrays;
public class { public static void main(String[] args) { int[] nums = new int[] { 1, 2, 3, 4, 5, 6, 7, 8 }; int k = 2; System.out.println(Arrays.toString(nums));
for (int i = 0; i < k; i++) { youYiOnce(nums); } System.out.println(Arrays.toString(nums));
reverse(nums, 0, nums.length - 1); reverse(nums, 0, k - 1); reverse(nums, k, nums.length - 1); System.out.println(Arrays.toString(nums));
} public static void youYiOnce(int[] nums) { int last = nums[nums.length - 1]; for (int i = nums.length - 2; i >= 0; i--) { nums[i + 1] = nums[i]; } nums[0] = last; } public static void reverse(int[] nums, int start, int end) { for (int i = start; i <= end; i++) { int temp = nums[start]; nums[start] = nums[end]; nums[end] = temp; start++; end--; } } }
|
近期评论