【LeetCode】75. 颜色分类

75. 颜色分类

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

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

思路:利用双指针的形式,左边的指针为0和1的分界线索引,右边的指针为1和2的分界线索引,然后依次对数组元素排序,小于1的元素放指针L的左边,大于1的元素放在指针 r 的右边,并相应移动指针位置。

class Solution {
public:
    void sortColors(vector<int>& nums) {
        int l = 0; //l,r为0,1,2的分界线
        int r = nums.size();    //[0,l)为0,[l,r)为1,[l,nums.size())为2
        for(int i = 0; i < r; ){  //到达右边界时结束
            if(nums[i] == 0){
                swap(nums[i],nums[l++]);    //互换位置,l右移
                i++;
            }
            else if(nums[i] == 1){
                i++;
            }
            else{
                assert(nums[i] == 2);
                swap(nums[i], nums[--r]);   //互换位置,r左移
            }
        }
    }
};

猜你喜欢

转载自blog.csdn.net/chen1234520nnn/article/details/113620635