zoukankan      html  css  js  c++  java
  • [LeetCode] 75. 颜色分类(荷兰国旗)

    class Solution {
    public:
        void sortColors(vector<int>& nums) {
            int begin=0,current=0,end=nums.size()-1;
            while(current<=end){   //带等号,相等的时候最后一个数还没有进行比较(current,end比较)
                if(nums[current]==0){
                    swap(nums[current++],nums[begin++]); //begin处得到一个0,自然后移一位
                }
                else if(nums[current]==2){
                    swap(nums[current],nums[end--]);//只改变末尾指针,换到当前的是最后一个值,需要在下一轮进行比较
                }
                else{
                    current++;
                }
            }
        }
    };

    为啥current==2时不++,而current==0时候却要++呢?

    等于0的时候,考虑到从左往右遍历,从begin处换过来的数不可能是0,也不可能是2,只能是1,故current++;

    但是与end交换时,末尾的数却可能是2,所以不++,要进行下一轮比较。

  • 相关阅读:
    将帅问题
    堆栈(链栈)
    堆栈(基础实现原理 顺序栈)
    双向链表
    冒泡排序 (泛型版)
    maven
    jboss数据源配置
    仓库介绍,nexus的安装
    mave聚合继承
    mac mysql 安装
  • 原文地址:https://www.cnblogs.com/nicetoseeyou/p/10540094.html
Copyright © 2011-2022 走看看