持续创作,加速成长!这是我参与「掘金日新计划 · 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;
}
}
题解:
采用冒泡排序,把大的数字冒泡到最后.
虽然是中等难度的题,但考点是排序,只要清楚这一点,就很容易解答了.
题目拓展:
给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
我们使用整数 1、 0 和 2 分别表示红色、白色和蓝色。
必须在不使用库的sort函数的情况下解决这个问题。
思考:
如果将颜色的顺序改变,那么就不能单纯使用冒泡排序,而是需要在排序比较时加一个判断.