跳转至

75.颜色分类 (Medium)*

题目描述*

标签*

排序;

思路 & 代码*

原地不适用计数数组,类似三路快排的划分过程,我们只要指定标准值 1,把 0 和 2 交换到两侧即可。三路快排的需要递归是因为不能确定 pivot。

class Solution {
public:
    void sortColors(vector<int>& nums) {
        int n = nums.size();
        int l = 0, r = n - 1;
        int pivot = 1;
        int i = l;
        while(i <= r) {
            if(nums[i] == pivot) {
                i++;
            }else if(nums[i] < pivot) {
                swap(nums[i++], nums[l++]);
            }else {
                swap(nums[i], nums[r--]);
            }
        }  
    }
};

最后更新: July 23, 2022