算法风暴
姬小野
这个作者很懒,什么都没留下…
展开
-
剑指offer之一—数组中出现次数超过一半的数字
文章目录问题描述方法一:给数组排序方法二:桶排序计数方法三:巧用栈方法四:找中位数(第n/2大数)用头脑风暴学算法,对于一个问题,我们不只是要解决它,还要去思考有什么好的方法,差的方法去解决,甚至是一些错误的但可以提供思想借鉴的方法。此问题“数组中出现次数超过一半的数字”是一道非常经典的算法题,我把它放在算法风暴系列第一篇来解析,探讨学习一个算法的过程,从慢到快,从最直观的方法到脑洞大开的方法...原创 2018-09-23 21:38:02 · 1892 阅读 · 0 评论 -
剑指offer之二—最小的k个数
文章目录问题描述方法一:排序 `O(nlogn)`方法二:找出第k大的数 `O(n)`方法三:使用二叉树 `O(nlogk)`算法思想最大堆版multiset版(红黑树)问题描述给定一个数组,求这个数组最小的k个数。方法一:排序 O(nlogn)最直观的方法大概就是排序了,排序大法好,很多问题排个序就可以解决,然而功能过剩的排序显然不是此问题的最佳解法。使用快排的话,平均时间复杂度为O(...原创 2018-09-24 17:48:08 · 266 阅读 · 0 评论 -
剑指offer之三-数据流中的中位数
问题描述对于一个数据流, 每读入一个数据, 就输出已读入数据的中位数.这道题有很多种方法.一. 暴力一点的是有序数组, 读入一个数据就将其有序化, 然后直接输出中位数. 这样插入一个数复杂度为O(n), 查找为O(1);二. 或者使用有序链表, 插入的复杂度为O(n), 查找为O(1). 为什么查找中位数可以是O(1)? 因为可以定义两个指针, 分别指向中间的两个数, 如果总数为奇数则同...原创 2018-09-25 23:14:25 · 335 阅读 · 0 评论