【LeetCode 75】Sort Colors

淩亂°似流年 2022-05-22 12:21 241阅读 0赞

题目:

Given an array with n objects colored red, white or blue, sort them in-place so that objects of the same color are adjacent, with the colors in the order red, white and blue.

Here, we will use the integers 0, 1, and 2 to represent the color red, white, and blue respectively.

Note: You are not suppose to use the library’s sort function for this problem.

Example:

  1. Input: [2,0,2,1,1,0]
  2. Output: [0,0,1,1,2,2]

Follow up:

  • A rather straight forward solution is a two-pass algorithm using counting sort.
    First, iterate the array counting number of 0’s, 1’s, and 2’s, then overwrite array with total number of 0’s, then 1’s and followed by 2’s.
  • Could you come up with a one-pass algorithm using only constant space?

1、使用系统的sort排序可通过。

2、计数排序

  1. 计数排序适用于排序元素个数(种类)有限的情况下,如题目中给出数组中只有0,1,2三种数。

【思路】定义存储元素个数的一个一维数组—->再根据个数将元素放入原数组中

【代码】

  1. class Solution {
  2. public void sortColors(int[] nums) {
  3. int[] count = new int[3];
  4. for(int i=0; i<nums.length; i++){
  5. //元素只有0,1,2
  6. count[nums[i]] ++;
  7. }
  8. int index = 0;
  9. for(int i=0; i<count[0]; i++){
  10. nums[index++] = 0;
  11. }
  12. for(int i=0; i<ccount[1]; i++){
  13. nums[index++] = 1;
  14. }
  15. for(int i=0; i<count[2]; i++){
  16. nums[index++] = 2;
  17. }
  18. }
  19. }

3、三路快排

  1. 适用于重复元素较多
  2. class Solution {
  3. public void sortColors(int[] nums) {
  4. //初始值保证了数组是无效数组,没有数据,若zero=0,则nums[0]=0,但此时并不能确定nums数组中有元素0
  5. int zero = -1; //nums[0...zero]=0
  6. int two = nums.length; //nums[two...n-1]=2
  7. for(int i=0; i<two; ){
  8. if(nums[i]==1){
  9. i++;
  10. }
  11. else if(nums[i]==2){
  12. two--;
  13. swap(two, i, nums);
  14. }
  15. else{
  16. zero++;
  17. swap(zero, i, nums);
  18. i++;
  19. }
  20. }
  21. }
  22. public void swap(int i, int j, int[] nums){
  23. int temp = nums[i];
  24. nums[i] = nums[j];
  25. nums[j] = temp;
  26. }
  27. }

https://www.imooc.com/article/16141

发表评论

表情:
评论列表 (有 0 条评论,241人围观)

还没有评论,来说两句吧...

相关阅读

    相关 LeetCode75——Sort Colors

    LeetCode75——Sort Colors 简要的分析一下题意就是对只包含 0,1,2 这三个数的数组进行排序。 这里提供三种方案,前两种是自己Y出来的,后一种是大