leetcode 每日一题 75. 颜色分类

一次遍历

思路:

由于排序后数组左侧0开始,右侧2结尾,可以使用两个指针p0记录左侧中0的位置,和p2记录右侧中2的位置。对数组进行遍历,如果遇到0,则与p0指向的元素值互换,p0指向下一位置,继续遍历下一元素。如果遇到2,则与p2指向的元素值互换,p2指向前一位置,继续遍历当前元素。遇到1,继续遍历下一元素。(这里p0继续遍历下一元素,p2还要遍历当前元素,是因为数组是从左向右遍历,p0在左边,也就意味着在遇到0进行交换的时候p0指向的只可能是当前位置0或者1,交换后可以直接遍历下一个元素,而p2指向的元素未知,交换后的当前值如果是2,则需要进行下一次交换

代码:

class Solution:
    def sortColors(self, nums: List[int]) -> None:
        p0 = curr = 0
        p2 = len(nums) - 1
        while curr <= p2:
            if nums[curr] == 0:
                nums[p0], nums[curr] = nums[curr], nums[p0]
                p0 += 1
                curr += 1
            elif nums[curr] == 2:
                nums[curr], nums[p2] = nums[p2], nums[curr]
                p2 -= 1
            else:
                curr += 1

 

posted @ 2020-06-12 08:41  nil_f  阅读(124)  评论(0)    收藏  举报