九章算法面试题70 排颜色II sort colors
来源:互联网 发布:淘宝热卖网 编辑:程序博客网 时间:2024/06/12 09:54
九章算法官网-原文网址
http://www.jiuzhang.com/problem/71/
题目
给定一个有n个对象(包括k种不同的颜色,并按照1到k进行编号)的数组,将对象进行分类使相同颜色的对象相邻,并按照1,2,...k的顺序进行排序。
在线测试本题
http://www.lintcode.com/zh-cn/problem/sort-colors-ii/
解答
这道题有两种方法。
方法一: 可以借助一个O(k)的数组bucket,然后扫一遍原来的数组,统计每一种颜色有多少个存放在数组bucket里面,然后题目要求把颜色排序,其实就是再把b里面的统计重新输出到原来的数组就好了。
方法二:题目要求不使用额外的数组,可以利用上面的思想,只不过要用原来的数组a来统计每个颜色出现的频率。由于原来的颜色肯定是正数1-k,所以我们可以用负数比如a[i]=-k,表示第i种颜色在原来的数组里面出现了k次。这道题原数组还要重复利用作为bucket数组,那么我们应该怎么办呢?首先for循环遍历一遍原来的数组,如果扫到a[i],首先检查a[a[i]]是否为正数,如果是把a[a[i]]移动a[i]存放起来,然后把a[a[i]]记为-1(表示该位置是一个计数器,计1)。 如果a[a[i]]是负数,那么说明这一个地方曾经已经计数了,那么把a[a[i]]计数减一,并把color[i] 设置为0 (表示此处已经计算过),然后重复向下遍历下一个数,这样遍历原数组所有的元素过后,数组a里面实际上存储的每种颜色的计数,然后我们倒着再输出每种颜色就可以得到我们排序后的数组。
0 1
- 九章算法面试题70 排颜色II sort colors
- 九章算法面试题69 排颜色 sort colors
- 143.Sort Colors II-排颜色 II(中等题)
- 九章算法面试题59 背包问题II
- 九章算法面试题73 翻转链表II
- 算法题——Sort Colors(JAVA)快排
- Sort Colors 颜色排序
- Lintcode - sort colors II
- [刷题]Sort Colors II
- sort-colors-ii
- lintcode:Sort Colors II
- Sort Colors II
- #143 Sort Colors II
- [LintCode]Sort Colors II
- 九章算法面试题3 找坏球
- 九章算法面试题28 链表找环
- 九章算法面试题71 平方根
- 九章算法面试题74 中位数
- 为java桌面程序制作安装向导程序---觉得有用,以后用
- java的开发环境 Escipline下载地址及其安装教程
- Linux:在已安装nginx情况下安装nginx模块
- Android开发常见的八大难题
- Java解八皇后问题——非迭代
- 九章算法面试题70 排颜色II sort colors
- Course schedule II
- Minimum size subarray sum
- Python的filter, map, reduce, lambda
- Coursera-Crypto1 Week1
- 用++操作符完成其它操作符的转换
- 欢迎使用CSDN-markdown编辑器
- 黑马程序员---(学习日记——异常)java中的异常机制
- 《C Primer Plus(第五版)中文版》第10章第1至13题