LeetCode 解題練習:Duplicate Zeros

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

If you like this post, please click the ads on the blog or buy me a coffee. Thank you very much.

題目原文描述 https://leetcode.com/problems/duplicate-zeros/

中文描述

給定一個固定長度的陣列 arr,複製每一個數字零,將剩下的陣列元素往右移。


範例一:

輸入 arr = [1, 0, 2, 0, 0, 5]

輸出 [1, 0, 0, 2, 0, 0]

因為 

複製零後的結果會為 [1, 0, 0, 2, 0, 0, 0, 0, 5],但因為原本的陣列長度為 6 ,所以只有前六個元素會保留 [1, 0, 0, 2, 0, 0]


範例二:

輸入 arr = [1, 2, 5]

輸出 [1, 2, 5]



解法一:

若陣列中有零出現,將之後的所有陣列元素往右移。


Python Code

class Solution:
    def duplicateZeros(self, arr: List[int]) -> None:
        """
        Do not return anything, modify arr in-place instead.
        """
        left = 0
        arrLen = len(arr)
        while left < arrLen:
            if arr[left] == 0: # 有零出現,將之後的所有陣列元素往右移。
                for right in range(arrLen - 1, left, -1): # 從陣列右邊開始複製
                    arr[right] = arr[right - 1] # 陣列元素指定為左邊的元素

                left += 1 # 跳至下一個位置
            left += 1

解法二:

建立一個新的陣列 newArray,產生含有零兩倍數量個數,再將 newArray的元素一一指定給 arr。


Python Code

class Solution:
    def duplicateZeros(self, arr: List[int]) -> None:
        """
        Do not return anything, modify arr in-place instead.
        """
        zeroDupCnt = 0
        newArr = [0] * len(arr) * 2
        left = 0

        # Duplicating zeros to new array
        for n in arr:
            if n == 0:
                zeroDupCnt += 1
                newArr[left] = n
                left += 1
           
            newArr[left] = n
            left += 1
       
        # Assign the result to the original array
        for i in range(len(arr)):
            arr[i] = newArr[i]
       

沒有留言: