LeetCode OJ_Sort Colors

3 篇文章 0 订阅
2 篇文章 0 订阅

昨晚睡觉前选了leetcode的一道题去做,结果最后也没通过,今早才调试出来。

    以下是题目:

Sort Colors


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.

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

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 an one-pass algorithm using only constant space?


   下面是我最后AC的代码,基本就是一个计数排序的标准代码。

<span style="font-size:14px;">class Solution {
public:
    void sortColors(int A[], int n) {
        int *B=new int[3];    //存储,0,1,2
        int *C=new int[n];    //存储数据备份
        for(int b=0;b<3;b++)
        {
            B[b]=0;  //初始化
        }
        for(int a=0;a<n;a++)
        {
            C[a]=A[a];   //初始化,复制
        }
        for(int i=0;i<n;i++)
        {
            B[A[i]]++;    // 计算每个数据的个数
        }
        for(int j=1;j<3;j++) 
        {
            B[j]=B[j]+B[j-1];  //  累加
        }
        for(int k=n;k>0;k--)
        {
            A[B[C[k-1]]-1]=C[k-1];   //
            B[C[k-1]]--;
        }
    }
};</span>

     关于计数排序;

           计数排序在对一定范围内的整数排序时,它的时间复杂度为Ο(n+k)(其中k是整数的范围),是线性的,快于任何比较排序算法。

           计数排序的过程中没有用到比较,即没有把任何两个数据直接拿来比较大小这是它性能优越的一个很大原因。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值