【算法训练】LeetCode#75 颜色分类

一、描述

75. 颜色分类

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

我们使用整数 012 分别表示红色、白色和蓝色。

必须在不使用库内置的 sort 函数的情况下解决这个问题。

示例 1:

输入:nums = [2,0,2,1,1,0]
输出:[0,0,1,1,2,2]

示例 2:

输入:nums = [2,0,1]
输出:[0,1,2]

二、思路

是不是可以理解为少用额外空间的sort...(不妨碍我上来就冒泡,直接3分...)

既然只有三种颜色,那么可以通过两次循环将三种数据分类。第一次循环将0放到头部,第二次循环放1。

三、解题


public class LeetCode75 {

    // 冒泡排序
    public void sortColorsZero(int[] nums) {
        int n = nums.length;
        boolean flag = true;
        for (int i = 0 ; i < n-1 ; i++){
            for (int j = 0 ; j < n-1-i ; j++){
                if (nums[j] > nums[j+1] ){
                    nums[j] = nums[j]^nums[j+1];
                    nums[j+1] = nums[j]^nums[j+1];
                    nums[j] = nums[j]^nums[j+1];
                    flag = false;
                }
            }
            if (flag){
                break;
            }
        }
    }


    // 分类
    public void sortColorsOne(int[] nums) {
        int n = nums.length;
        int loc = 0;
        for (int i = 0 ; i < n ; i++){
            if (nums[i] == 0){
                int temp = nums[i];
                nums[i] = nums[loc];
                nums[loc] = temp;
                loc++;
            }
        }
        for (int i = 0 ; i < n ; i++){
            if (nums[i] == 1){
                int temp = nums[i];
                nums[i] = nums[loc];
                nums[loc] = temp;
                loc++;
            }
        }
    }
}


posted @ 2023-03-19 18:09  小拳头呀  阅读(41)  评论(0编辑  收藏  举报