zoukankan      html  css  js  c++  java
  • 颜色分类

    题目链接:

    涉及知识:数组、双指针

    问题描述:

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

    算法思想:

    ​ 设置三个指针,初始状态 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;
        }
    }
    
  • 相关阅读:
    python的编码判断_unicode_gbk/gb2312_utf8(附函数)
    stat文件状态信息结构体
    内核配置中 ramdisk 大小修改
    mount命令详解
    dirent和DIR 结构体 表示文件夹中目录内容信息
    nandwrite 参数
    mke2fs 制作ext2文件系统image
    ext2文件系统错误
    照度/感光度(Lux)
    摄像机的几个重要的技术指标
  • 原文地址:https://www.cnblogs.com/zcxhaha/p/11406643.html
Copyright © 2011-2022 走看看