【排序】【数组】LeetCode 75. 颜色分类

题目链接

75.颜色分类

思路

题目要求按0、1、2的顺序排序,因为数量有限,所以通过两次遍历,分别将0和1交换到合适的位置,这样两次遍历之后,剩下的2就都在尾部了。

circle 代表这一次要对哪个数字进行重置位置,所以它的取值就限定在0、1,因为当我们确定好0和1位置之后,2的位置也就确定好了。

p 表示当前数字应该放置的位置,因为要从前往后排0、1、2,所以初值为 p=0

在第二层循环中,我们将与 circle 相等的元素放在 p 的位置,如果符合条件,便将 nums[i]nums[p] 的值进行交换。交换完成后 p++,指向下一个要放置的位置。

代码

class Solution {
    public void sortColors(int[] nums) {
        int p = 0;
        for (int circle = 0; circle < 2; ++circle) {
            for (int i = p; i < nums.length; i++) {
                // circle == 0 or 1
                // when circle == 0, we should move 0 to nums' head
                // when circle == 1, we should move 1 to nums' middle
                if (circle == nums[i]) {
                    int temp = nums[i];
                    nums[i] = nums[p];
                    nums[p] = temp;
                    ++p;
                }
            }
        }
    }
}
posted @ 2023-01-01 11:26  Frodo1124  阅读(54)  评论(2编辑  收藏  举报