LeetCode 1089. 複寫零(Java)

題目:給你一個長度固定的整數數組 arr,請你將該數組中出現的每個零都複寫一遍,並將其餘的元素向右平移。

注意:請不要在超過該數組長度的位置寫入元素。

要求:請對輸入的數組 就地 進行上述修改,不要從函數返回任何東西。
解讀: 遇到0複寫是指將其往內存在寫一次,然後其餘元素整體向右移動,那麼就會在原來0的位置的後一個繼續補一個0

示例 1:

輸入:[1,0,2,3,0,4,5,0]
輸出:null
解釋:調用函數後,輸入的數組將被修改爲:[1,0,0,2,3,0,0,4]

示例 2:

輸入:[1,2,3]
輸出:null
解釋:調用函數後,輸入的數組將被修改爲:[1,2,3]

 

提示:

  1.   1 <= arr.length <= 10000
  2.   0 <= arr[i] <= 9

解答:

輸入:[1,0,2,3,0,4,5,0]
遇到第一個0[1,0,02,3,0,4,5]
注:中間的那個0是由於移動而產生的
遇到第三個0[1,0,02,3,0,0,4]

代碼:

class Solution {
    public void duplicateZeros(int[] arr) {
       for (int i = 0, len = arr.length; i < len; i++) {
            if (arr[i] == 0) {
                //移動方法
                move(arr, i, len);
                //將其餘元素右移會在當前0的位置後面繼續產生一個0,所以需要繼續自加,不然之後的都會爲0
                i++;
            }
        }
        System.out.println(Arrays.toString(arr));
    }
    
      private static void move(int[] arr, int i, int len) {

        // 已經到了末尾不需要移動了
        if (i >= len) 
            return;

          //從最後一位開始移動
        for (int j = len - 1; j > i; j--) 
            arr[j] = arr[j - 1];
    }
}

結果: 在內存上還是可圈可點的嗎,但是速度那就是慘不忍睹了。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章