美文网首页
75. Sort Colors

75. Sort Colors

作者: sarto | 来源:发表于2022-04-18 11:06 被阅读0次

    题目

    给定一个数组 nums ,这个数组有 n 个对象 红,白,蓝。将它们本地排序使得相同的颜色相邻,并按红,白,蓝的顺序排列。
    红白蓝分别用 0,1,2 表示。

    解析

    用排序算法很容易做到这一点。而元素本身是有限的,我们未知的只是 1 元素的上下界,在这个问题里,1元素的上下界可以转换为 0 元素的下界和 1 元素的上界。考虑左右指针,指向0元素和1元素的上下界。
    初始时 p1= 0 p2=n-1
    然后从左往右遍历,遇到 2 就交换到 p2 并使 p2--。
    遇到 0 交换到 p1,并使p1++
    遇到 1 忽略。直到小于 p2 指针。

    伪代码

    p1=0
    p2=n-1
    for i<=p2
      if nums[i] == 0
        swap(nums[p1],0)
        p1++
      if nums[i] == 2
        swap(nums[p2],2)
        p2--
    

    代码

    func sortColors(nums []int)  {
        p1:=0
        p2:=len(nums)-1
        for i:=0;i<=p2; {
            if nums[i] == 0 {
                nums[p1],nums[i] = nums[i],nums[p1]
                i++
                p1++
            }else if nums[i] == 2 {
                nums[p2],nums[i] = nums[i],nums[p2]
                p2--
            } else {
                i++
            }
        }
    }
    
    image.png

    后记

    1. 要确定 i 指针一定是小于等于 p2 的。否则重复交换,就会出错。

    相关文章

      网友评论

          本文标题:75. Sort Colors

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