力扣第75题(荷兰国旗问题)
题目:
给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
注意:
不能使用代码库中的排序函数来解决这道题。
第一种分析:
考虑使用桶排序,因为只有红白蓝三种颜色,且分别用0、1、2代表,那么就可以将颜色代码作为键值,作为桶标记,将相同颜色的元素放入同一个桶中,然后再正序遍历各个桶存入到原数组,时间复杂度是线性的,o(3+n),n是元素的个数。
public void sortColors(int[] nums) { if (nums.length == 0 || nums == null){ return; } int[] bucket = new int[3]; for (int num : nums) { if (num == 0){ bucket[0]++; }else if (num == 1){ bucket[1]++; }else if (num == 2){ bucket[2]++; } } int k = 0; for (int i = 0; i < bucket.length; i++) { for (int j = 0; j < bucket[i]; j++) { nums[k++] = i; } } }
未完待续。。。。。