📅  最后修改于: 2023-12-03 14:49:52.165000             🧑  作者: Mango
二进制数组是由0和1组成的一维数组。我们可以通过一次遍历来将其排序。基本思路是从左到右扫描数组,记录0的出现次数,然后再扫描一遍数组,将前面记录的0插入到数组前面,剩下的位置填充1。
def sortBinaryArray(arr):
# 记录0的个数
zeros = 0
# 第一次遍历,记录0的个数
for i in range(len(arr)):
if arr[i] == 0:
zeros += 1
# 第二次遍历,将前面记录的0插入到数组前面,剩下的位置填充1
for i in range(len(arr)):
if i < zeros:
arr[i] = 0
else:
arr[i] = 1
return arr
arr = [0, 1, 0, 1, 0, 0, 1, 1, 1, 0]
result = sortBinaryArray(arr)
print(result) # 输出 [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]
通过一次遍历就实现了二进制数组的排序,时间复杂度和空间复杂度都是很优秀的。这种方法在其他问题中也是很常见的,比如将0移动到数组前面,1移动到数组后面等。