常见算法面试题的常见解法-1 Counting Sort
2011-04-13 16:28
435 查看
算法面试题中经常出现的一种题目就是 查找 或者是排序. 个人感觉有80%的题目都和查找排序有关
大部分常用的排序算法时间复杂度都是O(nLogn)
这个只能说是通用解,一般解
对于算法面试题中往往要求很低的时间复杂度,
例如下面这个题目
已知一个数组长为m 中间存放的都是整数 其值范围为1-m ,中间的元素有可能重复 也有可能不重复
如何在O(M)的情况下查到 (1-m)的数中 哪些数重复了,哪些数没有出现
counting sort 的本质是 新建一个长度为M的数组An 每一个数组下标代表一个数 ,数组中的值代表这个元素出现的次数 (初始值都为0)
那么, 遍历一次m 遇到一个数 就在对应的下标上加1
那么最终可以得到一个An 其中包含了所有元素的出现个数
将其展开 就可以获得排序完的数组
这是一种特殊的算法,只能解决特殊的问题 但是他的时间复杂度是O(n)
如果在你遇到排序 或者查找之类的算法题的时候,不如上去先试试counting sort
大部分常用的排序算法时间复杂度都是O(nLogn)
这个只能说是通用解,一般解
对于算法面试题中往往要求很低的时间复杂度,
例如下面这个题目
已知一个数组长为m 中间存放的都是整数 其值范围为1-m ,中间的元素有可能重复 也有可能不重复
如何在O(M)的情况下查到 (1-m)的数中 哪些数重复了,哪些数没有出现
counting sort 的本质是 新建一个长度为M的数组An 每一个数组下标代表一个数 ,数组中的值代表这个元素出现的次数 (初始值都为0)
那么, 遍历一次m 遇到一个数 就在对应的下标上加1
那么最终可以得到一个An 其中包含了所有元素的出现个数
将其展开 就可以获得排序完的数组
这是一种特殊的算法,只能解决特殊的问题 但是他的时间复杂度是O(n)
如果在你遇到排序 或者查找之类的算法题的时候,不如上去先试试counting sort
相关文章推荐
- 前端常见算法面试题之 - 二维数组中的查找[JavaScript解法]
- 前端常见算法面试题之 - 从尾到头打印链表[JavaScript解法]
- 前端常见算法面试题之 - 重建二叉树[JavaScript解法]
- 常见算法笔试或面试题
- 常见算法笔试或面试题
- 25道常见算法面试题
- 常见算法笔试或面试题
- [置顶] iOS面试题系列之常见算法
- 校招算法工程师常见面试题及答案总结02——SVM
- 非常有用的101道算法部分常见面试题
- 数据结构学习笔记 --- 线性表 (一些常见的关于链表的算法和面试题)
- 非常有用的101道算法部分常见面试题
- iOS常见的算法面试题及(swift)答案
- 80道常见数据结构面试题及其解法
- C#常见算法面试题小结
- 非常有用的101道算法部分常见面试题
- [算法面试] 25道常见算法面试题
- 非常有用的101道算法部分常见面试题
- 常见算法笔试或面试题
- 一个常见面试题的解法之我见