Try   HackMD

Leetcode 75. Sort Colors

給定一個只有0,1,2的array,將他原地排序。

想法

(1)暴力解

重頭開始直接排序。

程式碼:

def sortColors(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        for i in range(len(nums)):
            for j in range(i+1,len(nums)):
                if(nums[i]>nums[j]):
                    tag = nums[i]
                    nums[i] = nums[j]
                    nums[j] = tag

(2) 計數排序

因為只有0,1,2三種數字,所以可以分別記錄0跟1出現的次數tag跟tag1,再將索引0到tag的值變為0,索引tag到tag+tag1的值變成1,其餘變成2。

程式碼:

def sortColors(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        tag = 0
        tag1 = 0
        for i in nums:
            if(i==0):
                tag+=1
            elif(i==1):
                tag1+=1
        for i in range(len(nums)):
            if(i<tag):
                nums[i] = 0
            elif(i>=tag and i<tag+tag1):
                nums[i] = 1
            else:
                nums[i] = 2 

(3)使用兩個指標

分別記錄左,右,中間,來幫助排序。

程式碼

def sortColors(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        left = 0
        right = len(nums)-1
        middle = 0
        while(right>=middle):
            if(nums[middle]==0):
                tag = nums[middle]
                nums[middle] = nums[left]
                nums[left] = tag
                left+=1
                middle+=1
            elif(nums[middle]==2):
                tag = nums[middle]
                nums[middle] = nums[right]
                nums[right] = tag
                right-=1
            else:
                middle+=1