zoukankan      html  css  js  c++  java
  • 【LeetCode 75】颜色分类

    题目链接

    【题解】

    维护一个左边界l和一个右边界r 其中0..l-1都是'0' 而 r+1..n-1都是'2' 我们令i=l;i<=r; 枚举每一个a[i]; ①如果a[i]=2.那么把a[i]丢到a[r]的位置上。 同时a[r]上的数字放到a[i]上来。 然后我们令$i指针不变化$,因为我们不知道从a[r]过来的是0还是1,如果是0的话还得维护一下l的值。 ②如果a[i]=0,那么我们把a[i]丢到a[l]的位置上。 同时a[l]上的数字放到了a[i]上来.(然后l++) 同样$i指针不变化$,因为我们并不知道从a[l]过来的是1还是2(是2的话下一次操作得放到a[r]上去) ③如果a[i]=1,那么这就是它该待的地方,i++.

    【代码】

    class Solution {
    public:
        void sortColors(vector<int>& nums) {
            int l = 0,r = (int)nums.size();r--;
            while (l<=r && nums[l]==0) l++;
            while (l<=r &&nums[r]==2) r--;
            for (int i = l;i <= r;){
                if (nums[i]==2){
                    swap(nums[i],nums[r]);
                    r--;
                }else
                if (nums[i]==0){
                    swap(nums[i],nums[l]);
                    l++;                
                    i = max(i,l);
                }else i++;
            }
        }
    };
    
  • 相关阅读:
    笔记-树形dp
    20181018 考试记录
    20181015 考试记录&数论
    [模板]2-SAT 问题&和平委员会
    FLask的偏函数应用
    Flask中的g到底是个什么鬼?
    Flask源码关于local的实现
    Flask的“中间件”
    Flask之模板
    FLask之视图
  • 原文地址:https://www.cnblogs.com/AWCXV/p/11914784.html
Copyright © 2011-2022 走看看