leetcode-75-颜色分类

//1. 两次遍历

class Solution {

public:

    void sortColors(vector<int>& nums) {

        int N = nums.size(), cnt0 = 0, cnt1 = 0, cnt2 = 0;

        for (int i = 0; i < N; i++) {

            if (nums[i] == 0) cnt0++;

            else if (nums[i] == 1) cnt1++;

            else cnt2++;

        }

        for (int i = 0; i < cnt0; i++) nums[i] = 0;

        for (int i = 0; i < cnt1; i++) nums[i + cnt0] = 1;

        for (int i = 0; i < cnt2; i++) nums[i + cnt0 + cnt1] = 2;

    }

};

//2. 一次遍历(三路快排的思想)

class Solution {

public:

    void sortColors(vector<int>& nums) {

        int  zero = 0, two = nums.size() - 1;

        for (int i = 0; i <= two; i++) {

            if (nums[i] == 0) {

                swap(nums[zero], nums[i]);

                zero++;

            }

            else if (nums[i] == 2) {

                swap(nums[two], nums[i]);

                two--;

                i--;

            }

        }

    }

};

相关文章:

  • 2021-08-22
  • 2021-05-30
  • 2021-11-19
  • 2021-06-20
  • 2021-12-02
  • 2022-12-23
  • 2021-06-13
  • 2021-05-25
猜你喜欢
  • 2021-11-28
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-05
  • 2021-09-14
相关资源
相似解决方案