示例 1:
輸入: [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:
輸入: [-1,-100,3,99] 和 k = 2
輸出: [3,99,-1,-100]
解釋:
向右旋轉 1 步: [99,-1,-100,3]
向右旋轉 2 步: [3,99,-1,-100]數組
第一種暴力法:spa
public static void rotate1(int[] arr,int k) {
//對k作處理,肯定移動幾回 k %= arr.length; while(k>0) {
//將最後一個元素賦給臨時變量
int tmp = arr[arr.length - 1];
//從下標arr.length - 1開始,將前一個位置的元素賦給後一個位置 for(int i = arr.length - 1;i>0;i--) { arr[i] = arr[i - 1]; }
//最後將最後一個元素賦給第一個元素
arr[0] = tmp; k--; } }
第二種:逆序法code
public static void rotate2(int[] arr,int k) { //肯定移動次數 k %= arr.length; //將整個數組逆序 reserve(arr,0,arr.length - 1); //將前k個逆序 reserve(arr,0,k-1); //從下標k到數組長度之間逆序 reserve(arr,k,arr.length - 1); } //逆序 public static void reserve(int[] arr,int start,int end) { while(start < end) { int tmp = arr[end]; arr[end--] = arr[start]; arr[start++] = tmp; } }