美文网首页Go算法
(7)Go用三路快排思路解决颜色分类问题

(7)Go用三路快排思路解决颜色分类问题

作者: 哥斯拉啊啊啊哦 | 来源:发表于2019-05-14 10:50 被阅读0次
    直观的方法:计数排序(桶排序)
    // 方法1:计数排序
    // 时间复杂度: O(n)
    // 空间复杂度: O(k),k为元素的取值范围
    func sortColors(nums []int) {
        buf := make([]int, 3) // 存放0,1,2三个元素的频率
    
        for _, v := range nums {
            buf[v]++
        }
    
        k := 0
        for i := 0; i < 3; i++ {
            for j := 0; j < buf[i]; j++ {
                nums[j+k] = i
            }
            k += buf[i]
        }
    }
    
    // 方法2: 用3分快排的思路
    // 时间复杂度为: O(n)
    // 空间复杂度为: O(1)
    // 遍历一遍
    func sortColors2(nums []int) {
        j0 := -1        // [0...j0]==0
        j2 := len(nums) //[j2...n-1]==2
    
        i := 0
        for i < j2 {
            switch nums[i] {
            case 1:
                i++
            case 0:
                j0++
                nums[j0], nums[i] = nums[i], nums[j0]
                i++
            case 2:
                j2--
                nums[i], nums[j2] = nums[j2], nums[i]
            }
        }
    }
    

    提交leetcode,通过

    相关文章

      网友评论

        本文标题:(7)Go用三路快排思路解决颜色分类问题

        本文链接:https://www.haomeiwen.com/subject/urgjaqtx.html