leetcode75 颜色分类

2020-04-14  本文已影响0人  奥利奥蘸墨水

题目

颜色分类

分析

经典的荷兰国旗问题。

可以用三个指针,left,mid,right。left和right分别指向头和尾,mid指针在中间滑动。

mid指针滑到0的时候,就和left互换,left指针右滑。
滑到2的时候,就和right指针互换,right指针左滑。

代码

class Solution {
public:
    void sortColors(vector<int>& nums) {
        int i = 0,j = nums.size()-1,m;
        while(nums[i] == 0)
            i++;
        while(nums[j] == 2)
            j--;
            
        m = i;
        
        while(m <= j){
            if(nums[m] == 0){
                if(m != i)
                    swap(nums[m],nums[i]);
                i++,m++;
            }else if(nums[m] == 1){
                m++;
            }else{
                swap(nums[m],nums[j]);
                j--;
            }
        }
    }
};
上一篇 下一篇

猜你喜欢

热点阅读