找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 2424|回复: 0

[代码与实例] Lintcode464 Sort Integers II solution 题解

15

主题

15

帖子

15

积分

贫民

积分
15
Jenny 发表于 2018-6-14 22:15:08 | 显示全部楼层 |阅读模式
【题目描述】
Given an integer array, sort it in ascending order. Use quick sort, merge sort, heap sort or any O(nlogn) algorithm.
给一组整数,按照升序排序。使用归并排序,快速排序,堆排序或者任何其他 O(n log n) 的排序算法。

【题目解析】
我们可以使用类似桶排序的思想,对所有的数进行计数。
从左扫描到右边,遇到一个数字,先找到对应的bucket.比如 3 2 2 1 4 第一个3对应的bucket是index = 2 (bucket从0开始计算)
Bucket 如果有数字,则把这个数字移动到i的position(就是存放起来),然后把bucket记为-1(表示该位置是一个计数器,计1)。
Bucket 存的是负数,表示这个bucket已经是计数器,直接减1. 并把color 设置为0 (表示此处已经计算过)
Bucket 存的是0,与3一样处理,将bucket设置为-1, 并把color 设置为0 (表示此处已经计算过)
回到position i,再判断此处是否为0(只要不是为0,就一直重复2-4的步骤)。 6.完成1-5的步骤后,从尾部到头部将数组置结果。(从尾至头是为了避免开头的计数器被覆盖)



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表