常见算法面试题的常见解法-1 Counting Sort

算法面试题中经常出现的一种题目就是 查找 或者是排序. 个人感觉有80%的题目都和查找排序有关

大部分常用的排序算法时间复杂度都是O(nLogn)

这个只能说是通用解,一般解

对于算法面试题中往往要求很低的时间复杂度,

例如下面这个题目

已知一个数组长为m 中间存放的都是整数 其值范围为1-m ,中间的元素有可能重复 也有可能不重复

如何在O(M)的情况下查到 (1-m)的数中 哪些数重复了,哪些数没有出现

counting sort 的本质是 新建一个长度为M的数组An 每一个数组下标代表一个数 ,数组中的值代表这个元素出现的次数 (初始值都为0)

那么, 遍历一次m 遇到一个数 就在对应的下标上加1

那么最终可以得到一个An 其中包含了所有元素的出现个数

将其展开 就可以获得排序完的数组

这是一种特殊的算法,只能解决特殊的问题 但是他的时间复杂度是O(n)

如果在你遇到排序 或者查找之类的算法题的时候,不如上去先试试counting sort

posted on   听说读写  阅读(2331)  评论(1编辑  收藏  举报

努力加载评论中...

导航

点击右上角即可分享
微信分享提示