75. 颜色分类
#初步想法,不要求用sort,那么分别记录012的个数在构造数组
class Solution:
def sortColors(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
count_0=count_1=count_2=0
for i in nums:
if i==0:
count_0+=1
elif i==1:
count_1+=1
else:
count_2+=1
nums_=[]
for i in range(count_0):
nums_.append(0)
for i in range(count_1):
nums_.append(1)
for i in range(count_2):
nums_.append(2)
print(nums_)
return nums_
#虽然结果是对的,但要求更改原数组,所以这相当偷巧
---
#单指针,先把0调到最前方,再调节1的位置,交换使用r1记录0结束1开始的位置
class Solution:
def sortColors(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
r1, i, n = 0, 0, len(nums)
# 第一步:通过交换 使得nums[0,...,r1-1]都是0
while i<n:
if nums[i]==0:
nums[r1], nums[i]=nums[i], nums[r1]
r1+=1
i+=1
# 第二步:通过交换 使得nums[r1,...,r2-1]都是1
r2, i = r1, r1
while i<n:
if nums[i]==1:
nums[r2], nums[i]=nums[i], nums[r2]
r2+=1
i+=1
return nums
---