leetcode之複寫零

本文主要記錄一下leetcode之複寫零數組

題目

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

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

要求:請對輸入的數組 就地 進行上述修改,不要從函數返回任何東西。

 

示例 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 <= arr.length <= 10000
0 <= arr[i] <= 9


來源:力扣(LeetCode)
連接:https://leetcode-cn.com/problems/duplicate-zeros
著做權歸領釦網絡全部。商業轉載請聯繫官方受權,非商業轉載請註明出處。

題解

class Solution {
    public void duplicateZeros(int[] arr) {
        int count = 0;
        for (int i = 0; i < arr.length; i++) {
            count += arr[i] == 0 ? 1 : 0;
        }
        for(int i=arr.length-1; i>=0; i--) {
            if(arr[i] == 0){
                count--;
            }
            if(i + count < arr.length){
                arr[i + count] = arr[i];
                if(arr[i] == 0 && i + count + 1 < arr.length){
                    arr[i + count + 1] = 0;
                }
            }
        }
    }
}

小結

這裏遍歷數組,計算值爲0的個數count,而後從後遍歷數據,遇到0就遞減該值,而後判斷i + count是否超出數組長度,沒有的話則將i的值設置到i + count,緊接着再當前位置值爲0且i + count + 1不超出數組長度的時候將i + count + 1的值設置爲0。網絡

doc

相關文章
相關標籤/搜索