Lintcode464 Sort Integers II solution 题解

【题目描述】

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) 的排序算法。

【题目链接】

www.lintcode.com/en/problem/sort-integers-ii/

【题目解析】

我们可以使用类似桶排序的思想,对所有的数进行计数。

从左扫描到右边,遇到一个数字,先找到对应的bucket.比如 3 2 2 1 4 第一个3对应的bucket是index = 2 (bucket从0开始计算)

Bucket 如果有数字,则把这个数字移动到i的position(就是存放起来),然后把bucket记为-1(表示该位置是一个计数器,计1)。

Bucket 存的是负数,表示这个bucket已经是计数器,直接减1. 并把color[i] 设置为0 (表示此处已经计算过)

Bucket 存的是0,与3一样处理,将bucket设置为-1, 并把color[i] 设置为0 (表示此处已经计算过)

回到position i,再判断此处是否为0(只要不是为0,就一直重复2-4的步骤)。 6.完成1-5的步骤后,从尾部到头部将数组置结果。(从尾至头是为了避免开头的计数器被覆盖)

【参考答案】

www.jiuzhang.com/solutions/sort-integers-ii/

你可能感兴趣的:(Lintcode464 Sort Integers II solution 题解)