Middle-题目28:75. Sort Colors

原创 2016年05月31日 15:49:52

题目原文:
Given an array with n objects colored red, white or blue, sort them 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.
题目大意:
有三个对象,分别是红色,白色,蓝色,对他们排序使得所有的颜色按照红色-白色-蓝色的顺序,这里使用0,1,2分别代表红色,白色,蓝色。

抽象成算法模型即:
给出一个数组,数组里面只有0,1,2三个数字,对其排序。
题目分析:
1. 朴素解法:既然是排序,调用Java的API即可。
2. 计数排序:先扫描一遍数组,统计有多少0,多少1,多少2,然后再扫描一遍数组,按0,1,2的个数分别填充数组。
3. 交换排序:从0开始记录红色和白色的插入位置,扫描数组,如果扫到当前位置是1,则与1应插入的位置交换,如果扫到当前位置是0,则先与1插入的位置交换,再与0插入的位置交换。(因为换到0的位置以后,1的位置也向后移动了)
源码:(language:c)
方法1略。
方法2:

void sortColors(int* nums, int numsSize) {
    int red=0,white=0,blue=0;
    for(int i = 0;i<numsSize;i++) {
        if(nums[i] == 0)
            red++;
        else if(nums[i] == 1)
            white++;
        else
            blue++;
    }
    for(int i=0;i < numsSize;i++) {
        if(red > 0) {
            red--;
            nums[i]=0;
        }
        else if(white > 0) {
            white--;
            nums[i]=1;
        }
        else
            nums[i]=2;
    }
}

方法3:

void sortColors(int* nums, int numsSize) {
    int Insert_Red=0,Insert_White=0;
    for(int i=0;i<numsSize;i++) {
      if(nums[i]==1) {    
           nums[i]=nums[Insert_White];
           nums[Insert_White++]=1;
      }
      else if(nums[i]==0) {   
           nums[i]=nums[Insert_White];
           nums[Insert_White++]=nums[Insert_Red];
           nums[Insert_Red++]=0;
      }

    }
}

成绩:
方法1:1ms,beats 3.63%,众数1ms,75.47%
方法2:0ms,beats 2.63%,众数0ms,97.37%
方法3:2ms,beats 2.63%
Cmershen的碎碎念:
方法2和方法3的时间复杂度都是O(n),但方法2扫了两遍数组,方法3扫了一遍,但多次提交都是方法2时间短。

版权声明:完整版Leetcode题解请出门左转https://github.com/cmershen1/leetcode/tree/master/docs

LeetCode OJ 系列之75 Sort Colors --Python

Problem: Given an array with n objects colored red, white or blue, sort them so that objects of...
  • ln152315
  • ln152315
  • 2015年12月09日 01:37
  • 423

LeetCode 75(Sort Colors)Java

原题:Given an array with n objects colored red, white or blue, sort them so that objects of the same...
  • Jassy1994
  • Jassy1994
  • 2016年12月01日 09:41
  • 167

leetCode 75.Sort Colors (颜色排序) 解题思路和方法

Given an array with n objects colored red, white or blue, sort them so that objects of the same colo...
  • xygy8860
  • xygy8860
  • 2015年07月19日 16:38
  • 652

Leetcode 75. Sort Colors 色彩排序 解题报告

1 解题思想这道题是说,现在有红色,白色,蓝色三种,分别用0,1,2表示,现在有一个表示这样的数组,然后请把它进行排序,使得相同颜色的在一起,并且整体按照0 1 2排序。这道题其实用不到排序,首先我们...
  • MebiuW
  • MebiuW
  • 2016年05月19日 16:18
  • 934

LeetCode(75)Sort Colors (荷兰三色旗问题 Dutch National Flag)

题目如下: The flag of the Netherlands consists of three colours: red, white and blue. Given balls of the...
  • feliciafay
  • feliciafay
  • 2014年02月10日 03:42
  • 4609

Leetcode_75_Sort Colors

本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/43302343 Given an array wi...
  • pistolove
  • pistolove
  • 2015年01月30日 07:32
  • 1409

LeetCode - 75. Sort Colors

第一种方法是基于计数排序的算法,需要对数组进行两遍的扫描,第一遍统计红,白和蓝的数目,第二遍生成新的数组。这种方法可以进行扩展,对于数组中数字范围已知的情况,都可以使用这种算法。时间复杂度为O(n),...
  • shenzhu0127
  • shenzhu0127
  • 2016年07月03日 12:47
  • 153

【Medium】75. Sort Colors

Given an array with n objects colored red, white or blue, sort them so that objects of the same colo...
  • shirleyleychen
  • shirleyleychen
  • 2016年09月14日 11:33
  • 65

75. Sort Colors 快速排序

题目: Given an array with n objects colored red, white or blue, sort them so that objects of the same...
  • gcola007
  • gcola007
  • 2017年07月28日 15:06
  • 99

75. Sort Colors(第三周)

Description Sort Colors - LeetCode Given an array with n objects colored red, white or blue, sor...
  • qq1997722
  • qq1997722
  • 2017年09月24日 18:00
  • 79
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Middle-题目28:75. Sort Colors
举报原因:
原因补充:

(最多只允许输入30个字)