数据结构算法
文章平均质量分 83
数据结构知识点总结以及数据结构学习中遇到的一些值得学习的算法思路和一些oj题
wuqiongjin
那时候,未来遥远而没有形状,梦想还不知道该叫什么名字
展开
-
Skiplist跳表详解及其模拟实现
1.跳表的概念、2.Skiplist在插入时采用随机层数的方法是如何保证效率的呢?、3.跳表的模拟实现、4.跳表VS平衡搜索树和哈希表原创 2022-10-24 14:19:21 · 672 阅读 · 1 评论 -
快速排序的三种实现方法及非递归实现快排
快速排序原创 2021-03-26 22:25:44 · 6099 阅读 · 8 评论 -
TopK问题的三种解法
TopK问题是指从n个数据中取前K个数据,在生活中的应用也有很多,如游戏中xxx的排行榜前10名等。在这篇博客中我将主要利用堆去解决TopK问题。 堆排序 首先我们需要建一个堆,然后我们再进行堆排序,排好序后直接取前K个就可以了。需要注意的是在使用堆排序的时候,我们需要确定我们要排升序还是降序。如果是升序的话,我们要建一个大根堆;如果是降序的话,我们要建一个小根堆。思路:(可以结合图来进行分析) 这里我们以排降序为例子进行说明,建好小根堆后,我们将堆顶元素与堆中的最后一个元素进行互换 (让最小的元素..原创 2021-03-19 16:33:04 · 5840 阅读 · 9 评论 -
如何灵活使用“双指针”
双指针一般运用于数组和链表当中。在数组当中,我们通常利用2个下标去进行操作(如:删除数组中的某个元素,二分查找等);在链表当中,我们会去用2个指针(快指针fast和慢指针slow)对链表结构进行操作(如:求链表的中间结点,求相交链表的交点,判断链表是否成环等)。 双指针在数组中的应用: 1.原地删除数组中值为val的元素,时间复杂度要求为O(N),空间复杂度为O(1) 这道题由于时间复杂度的限制,没办法用双重循环去删除数组中的重复元素,因此这里采用了双下标去删除的做法。一个下标为slow,另...原创 2021-03-04 18:53:54 · 2938 阅读 · 8 评论