189.轮转数组
难度:中等
示例 1:
输入: nums = [1,2,3,4,5,6,7], k = 3
输出: [5,6,7,1,2,3,4]
解释:
向右轮转 1 步: [7,1,2,3,4,5,6]
向右轮转 2 步: [6,7,1,2,3,4,5]
向右轮转 3 步: [5,6,7,1,2,3,4]
示例 2:
输入:nums = [-1,-100,3,99], k = 2
输出:[3,99,-1,-100]
解释:
向右轮转 1 步: [99,-1,-100,3]
向右轮转 2 步: [3,99,-1,-100]
public class Test01 {
public static void main(String[] args) {
Test01 t = new Test01();
int[] nums = {1,2,3,4,5,6,7}; //数组必须有序
t.str(nums,3); //向右转动1次
//System.out.println(index);
System.out.println(Arrays.toString(nums));
}
public void str(int[] nums,int k) {
/*System.out.println("---------方式1----------");
int n = nums.length; //数组的长度为7赋值给n
int[] news =Arrays.copyOf(nums,n); //将nums里面的值和n的长度赋值给news 1,2,3,4,5,6,7
for (int i = 0; i < n; i++) { //判断数组是否满足n的长度
nums[(i+k)%n] = news[i]; //将新数组下标news[0]赋值给nums[(0+1)%7],将新数组下标为0的值1,赋值给原来的数组下标为1的值2
}*/
System.out.println("-----------方式2-----------");
int length = nums.length; //数组的长度为7赋值给length
int[] temp = new int[length]; //将数组的长度7赋值给temp临时数组
for (int i = 0; i < length; i++) {
temp[i] = nums[i]; //将原来数组中的每一个值赋值给临时数组中的每一个元素
}
for (int i = 0; i < length; i++) {
nums[(i + k) % length] = temp[i]; //将临时数组下标temp[0]赋值给原来数组nums[(0+1)%7],之所以对7取余,就是怕数组下标越界异常
}
/*System.out.println("-----------方式3------------");
int length = nums.length; //数组长度为7然后赋值给length
k %= length; //k=k%length,对长度取余,之所以是取余就怕数组越界异常
reverse(nums, 0, length - k - 1);//先反转前面的
reverse(nums, length - k, length - 1);//接着反转后面k个
reverse(nums, 0, length - 1);//最后在反转全部的元素
}
//把数组中从[start,end]之间的元素两两交换,也就是反转
public void reverse(int[] nums, int start, int end) {
while (start < end) {
int temp = nums[start];
nums[start++] = nums[end];
nums[end--] = temp;
}*/
}
}