zoukankan      html  css  js  c++  java
  • 三指针(三指针排序只有三种元素的数组)--12--三指针--颜色分类

    颜色分类

    给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。

    此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。

    注意:
    不能使用代码库中的排序函数来解决这道题。

    示例:

    输入: [2,0,2,1,1,0]
    输出: [0,0,1,1,2,2]

    题目来源:力扣(LeetCode)
    题目链接:https://leetcode-cn.com/problems/sort-colors

    分析

      题目可通过快排、三指针,甚至可以通过遍历三种颜色种类数量再按照三种颜色的数量进行重新构建一个新数组的方法解题

      但是现在我想为了针对三指针算法进行讲解,此题我用三指针进行解题

      三指针顾名思义,三个标记位置的指针,分别是左指针,右指针,遍历指针。具体操作看代码简单粗暴

     1 class Solution {
     2 public:
     3     void sortColors(vector<int>& nums) {
     4         if(nums.size() < 2)
     5             return;
     6         int left = 0,right = nums.size() - 1;//left是左指针,right是右指针
     7         int zz = left;//zz是遍历指针
     8         while(zz <= right){
     9             if(nums[zz] == 0&&zz >= left){
    10                 swap(nums[zz],nums[left]);
    11                 left++;
    12             }
    13             else if(nums[zz] == 2){
    14                 swap(nums[zz],nums[right]);
    15                 right--;
    16             }
    17             else{
    18                 zz++;
    19             }
    20         }
    21     }
    22 };
  • 相关阅读:
    设计模式(十)外观模式
    设计模式(九)装饰器模式
    设计模式(八)组合模式
    设计模式(七)桥接模式
    设计模式(六)代理模式
    设计模式(五)适配器模式
    linux 安装 node
    LeetCode 335. Self Crossing
    LeetCode 332. Reconstruct Itinerary 最小欧拉路径
    LeetCode 327. Count of Range Sum 区间和的个数
  • 原文地址:https://www.cnblogs.com/qinqin-me/p/12287368.html
Copyright © 2011-2022 走看看