75. 颜色分类

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
---

 

logo
posted @ 2022-08-30 14:16  是冰美式诶  阅读(32)  评论(0)    收藏  举报