颜色分类

Posted zcxhaha

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了颜色分类相关的知识,希望对你有一定的参考价值。

题目链接:

涉及知识:数组、双指针

问题描述:

? 该问题又被称为荷兰国旗问题,大概意思为给每一个数字指定一种颜色,并按荷兰国旗颜色的顺序进行调整。

算法思想:

? 设置三个指针,初始状态 low 指针指向最低位, high 指针指向高位,并设置 cur 指针指向当前的元素。cur 指针从头开始遍历。

  • 初始化 0 的最右边界:low = 0。

  • 初始化 2 的最左边界 :high = n - 1。

  • 初始化当前考虑的元素序号 :cur = 0.
    • While cur <= high :
    • 若 nums[cur] = 0 :交换第 cur 个和第 low 个元素,并将指针都向右移。
    • 若 nums[cur] = 2 :交换第 cur 个和第 high 个元素,并将 high 指针左移 。
    • 若 nums[cur] = 1 :将指针 cur 右移。

为什么和低位交换之后,两个指针均向右移,而和高位交换之后只将 high 指针向左移动?

? 因为和低位交换之后,cur 所指向的元素为 1(原先的 low 指针指向的为 1,当然刚开始的时候可能为 0,但是没有影响),而 high 指针原先指向的元素可能为 2,交换之后 cur 指向的元素可能为 2,需要在和 high 指向的元素进行交换,因此此时不可以将 cur 向右移动。

代码:

class Solution 
    public void sortColors(int[] nums) 
        int low = 0;
        int high = nums.length - 1;
        int cur = 0;

        while(cur <= high)
            if(nums[cur] == 0)
                int tmp = nums[cur];
                nums[cur] = nums[low];
                nums[low] = tmp;
                low++;
                cur++;
            else if(nums[cur] == 2) 
                int tmp = nums[cur];
                nums[cur] = nums[high];
                nums[high] = tmp;
                high--;
             else 
                cur++;
            
        

        return;
    

以上是关于颜色分类的主要内容,如果未能解决你的问题,请参考以下文章

图像中颜色的分类器

SQL数据库中怎么让结果集分类汇总显示颜色

leetcode-颜色分类

超强函数计算颜色填充数据,自定义单元格类别,颜色分类汇总计算

颜色分类--力扣

LeetCode:颜色分类75