leetcode-75颜色分类

101 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第 2 天,点击查看活动详情

75颜色分类
给定一个包含红色、白色和蓝色、共 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]

思考:
1.要求按照0,1,2的顺序排列.
2.因为刚好是按数字从小到大升序排列,考虑用排序算法.

var sortColors = function (nums) {
    let result = new Color().run(nums);
    return result;
};
class Color {
    run(nums) {
        if (nums.length <= 1) {
            return nums;
        }
        let result = this.getCorrectOrder(nums);
        return result;
    }
    getCorrectOrder(nums) {
        for (let i = 0; i < nums.length; i++) {
            for (let j = i + 1; j < nums.length; j++) {
                if (nums[i] >= nums[j]) {
                    let temp = nums[j];
                    nums[j] = nums[i];
                    nums[i] = temp;
                }
            }
        }
        return nums;
    }
}

题解:
采用冒泡排序,把大的数字冒泡到最后. 虽然是中等难度的题,但考点是排序,只要清楚这一点,就很容易解答了.

75.jpg

题目拓展:
给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
我们使用整数 1、 0 和 2 分别表示红色、白色和蓝色。
必须在不使用库的sort函数的情况下解决这个问题。

思考:
如果将颜色的顺序改变,那么就不能单纯使用冒泡排序,而是需要在排序比较时加一个判断.