若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。
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]
沒有留言:
張貼留言