題目要求:將一個int數組向右移k步,(數組尾部元素添加到數組頭部)
tags:Array
//我的方法:開闢一個新的int[]存儲空間
public void rotate(int[] nums, int k) {
k=k%nums.length;
int[] temp = new int[k];
for(int i=0;i<k;i++){
temp[i] = nums[nums.length-k+i];
}
for(int i=nums.length-k-1;i>=0;i--){
nums[i+k] = nums[i];
}
for(int i=0;i<k;i++){
nums[i]=temp[i];
}
System.out.println(Arrays.toString(nums));
}
//別人的思路:旋轉3次,首先對兩邊數組的旋轉,接着是對整個數組的旋轉
public void rotate2(int[] nums, int k) {
k=k%nums.length;
reverse(nums, 0, nums.length-k-1);
reverse(nums, nums.length-k, nums.length-1);
reverse(nums, 0, nums.length-1);
}
public void reverse(int[] nums, int i,int j){
while(i<j){
nums[i]=nums[i]+nums[j];
nums[j]=nums[i]-nums[j];
nums[i]=nums[i]-nums[j];
i++;
j--;
}
}