题目
题解一:开辟数组 取模运算寻找位置(i+k)mod n =新位置
思路:通过,开辟数组 取模运算寻找新位置------位置(i+k)mod n =新位置
int[] newNums = new int[nums.length];for(int i = 0;i<nums.length;i++){newNums[(i+k)%nums.length] = nums[i];}for(int i = 0;i<nums.length;i++){nums[i] = newNums[i];}
题解二:数组翻转
思路:
1、先全部翻转
2、在根据k 的值 对k-1 的两边区域进行翻转
3、注意 k如果> 数组长度 就会出现下标越界,所以需要开始就k对数组长度取模 k %=n
// 方法二 数组翻转// k = 3 n=7 1 2 3 4 | 5 6 7// 7 6 5 | 4 3 2 1(全部翻转)// 5 6 7 | 1 2 3 4(以k-1为界分开翻转)int length = nums.length;k %= length;//这一步很关键,如果k>lenght 会出现数组下标越界问题,所以需要取模revese(0,length-1,nums);revese(0,k-1,nums);revese(k,length-1,nums);}public void revese(int begin,int end,int[] nums) {while(begin < end){int temp = nums[begin] ;nums[begin] = nums[end];nums[end] = temp;begin ++;end --;}