天天看點

#yyds幹貨盤點# LeetCode 熱題 HOT 100:顔色分類

題目:

給定一個包含紅色、白色和藍色、共 n 個元素的數組 nums ,原地對它們進行排序,使得相同顔色的元素相鄰,并按照紅色、白色、藍色順序排列。

我們使用整數 0、 1 和 2 分别表示紅色、白色和藍色。

必須在不使用庫的sort函數的情況下解決這個問題。

示例 1:

輸入:nums = [2,0,2,1,1,0]

輸出:[0,0,1,1,2,2]

示例 2:

輸入:nums = [2,0,1]

輸出:[0,1,2]

class Solution {
    public void sortColors(int[] nums) {
        int n = nums.length;
        int ptr = 0;
        for (int i = 0; i < n; ++i) {
            if (nums[i] == 0) {
                int temp = nums[i];
                nums[i] = nums[ptr];
                nums[ptr] = temp;
                ++ptr;
            }
        }
        for (int i = ptr; i < n; ++i) {
            if (nums[i] == 1) {
                int temp = nums[i];
                nums[i] = nums[ptr];
                nums[ptr] = temp;
                ++ptr;
            }
        }
    }
}