我有一个包含整数的n个元素的固定大小的数组。我想将所有非零值放在数组的右侧。
示例:
[1, 0, 0, 4] => [0, 0, 1, 4]
[2, 0, 4, 3] => [0, 2, 4, 3]
[1, 0, 0] => [0, 0, 1]
执行此操作的简单算法是什么?
这是我目前拥有的,但是它只会将索引处的元素向右移
def slide(arr):
i = len(arr) - 2
while i >= 0:
if arr[i] != 0 and arr[i + 1] == 0:
arr[i + 1] = arr[i]
arr[i] = 0
i -= 1
print(arr)
答案 0 :(得分:2)
我会计算零,将其删除并在开始时包含它们:
zeros = [0] * arr.count(0)
while 0 in arr:
arr.remove(0)
arr = zeros + arr
答案 1 :(得分:2)
要以初始顺序右移值: (就地,线性时间复杂度)
def slide(arr):
zeros = 0
for i in range(len(arr) - 1, -1, -1):
if arr[i] == 0:
zeros += 1
else:
arr[i+zeros] = arr[i]
for i in range(zeros):
arr[i] = 0
print(arr)
slide([1,0,2,0,0,3])
>>[0, 0, 0, 1, 2, 3]
答案 2 :(得分:1)
Create a new array, same size, initialized with 0's.
Scan the first array:
if the current element is not zero:
copy it into the second array starting from the end
时间复杂度:O(n) 空间复杂度:O(n)
简单直观的方法