zoukankan      html  css  js  c++  java
  • LeetCode 75. Sort Colors (python一次遍历,模拟三路快排的分割操作)

    题目分析:

    1. 本题需要实现数字只包含0,1,2的排序,并且要求一次遍历。
    2. 由于只用把数字隔离开,很容易想到快排的分割操作partition。
    3. 将三类数字隔离开,也就是模拟三路快排的分割操作了。

    解题思路

    1. 快排是选取哨兵p,将一段数组分成<p,=p,>p三类,并按这个顺序隔离开。
    2. 本题类似,哨兵为1,将一段数组分成0,1,2,即<1,=1,>1,并按这个顺序隔离开。

    代码如下

    class Solution:    
        def sortColors(self, nums: List[int]) -> None:
            left = 0
            #mid表示目前第一个1的位置,在len(nums)表示1还未出现
            #加入1的操作,只用将mid-1,然后与left交换
            mid = len(nums)
            #right表示目前第一个2的位置,在len(nums)表示第一个2还未出现
            #加入2的操作,只用将right-1,然后与left交换
            right = len(nums)
            
            #left是一个游标,不断交换,直到nums[left]=0
            while left < mid:
                if nums[left] == 0:
                    left += 1
                elif nums[left] == 1:
                    mid -= 1
                    temp = nums[left]
                    nums[left] = nums[mid]
                    nums[mid] = temp
                elif nums[left] == 2:
                    right -= 1
                    temp = nums[left]
                    nums[left] = nums[right]
                    nums[right] = temp
                    # 处理出现了2,但是还未出现1的情况
                    if mid > right:
                        mid = right
    
  • 相关阅读:
    SPSS-Friedman 秩和检验-非参数检验-K个相关样本检验 案例解析
    SPSS-多重响应-频率和交叉表案例分析(问卷调查分析)
    SPSS--回归-多元线性回归模型案例解析
    深入理解RunLoop
    杂七杂八集合
    单元测试
    笔记
    http断点续传
    iOS性能优化
    群聊协议
  • 原文地址:https://www.cnblogs.com/zhangjiuding/p/10930372.html
Copyright © 2011-2022 走看看