給定一個數組,將數組中的元素向右移動 k 個位置,其中 k 是非負數。

示例 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; } }
相關文章
相關標籤/搜索