![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
yaoayao470
这个作者很懒,什么都没留下…
展开
-
堆排序
为什么要使用堆排序? 在N个元素中选出前M个元素,若使用普通排序算法,时间复杂度最快是O(NlogN),使用堆排序可以把时间复杂度降低到O(NlogM)。 对一个元素的操作: 普通数组:入队:O(1),出队:O(N) 排序数组:入队:O(N),出队:O(1) 堆:入队:O(logN),出队:O(logN) 堆中某个节点的值总不大于其父节点的值,堆是一棵完全二叉树(并不是层越高数值越大) 底层使用数...原创 2019-02-02 00:03:17 · 118 阅读 · 0 评论 -
链表题主要思路
1.穿针引线(one-pass) 2.拆分链表(构造几个新的链表再拼接) 3.涉及头节点的边界情况,构造虚拟节点原创 2019-02-28 16:33:59 · 156 阅读 · 0 评论 -
并查集
并查集可以很好的解决连接问题和数学中集合类的实现原创 2019-02-07 22:56:53 · 132 阅读 · 0 评论 -
排序算法
选择排序 在剩余的数组中选择最小的插入到相应位置 时间复杂度:O(N^2) public static void sort(int[] a,int low,int high){ for(int i = 0;i<=high;i++){ int minIndex = i; for(int j = i+1;j<=high;j++){ if(a[j]<a[mi...原创 2019-01-29 20:41:58 · 132 阅读 · 0 评论 -
平衡二叉树-红黑树
如果数组按照有序顺序插入二叉树,那么二叉树就会退化为链表,同时因为要进行左右子树的判断,速度会比链表还慢。由于数据是动态的插入,因此我们不能在最开始获得全部数据,所以就不能用打乱数据的方式来解决这个问题,由此衍生出了红黑树,他能保证插入删除查找的概率稳定在O(logN)。 ...原创 2019-02-06 19:53:01 · 370 阅读 · 0 评论 -
二分搜索树
二分搜索树主要用于表查询(字典查询) 查找 插入 删除 普通数组 O(N) O(N) O(N) 顺序数组 O(logN) O(N) O(N) 二分搜索树 O(logN) O(logN) O(logN) 可以高效的动态维护数据。 ...原创 2019-02-03 23:28:09 · 114 阅读 · 0 评论 -
堆的应用
1.在N个数中找到前M个数 时间复杂度O(NlogM)。 2.多路归并排序 每次将数组分为d路,在这d个数中使用堆排序推出最小的那个,在d等于数组长度的时候退化为堆排序。 3.d叉堆结构 可以降低树的高度,但同时增加了比较次数。 ...原创 2019-02-02 17:50:37 · 111 阅读 · 0 评论 -
索引堆
与普通堆相比,节点存储的是数据的索引,维护时比较数据,但交换索引。 适用于数据非常复杂,交换起来比较耗时,或者我们堆中的数据和索引有固定关系的情况,在构建为堆之后会破坏这些关系,在希望修改数据时会比较麻烦,因此可以使用索引堆。 为了完成修改操作,但不需要遍历索引数组的需求,引入反向索引。 reverse[i]表示索引i在index数组中的位置(经典思想) index[i] = j; reverse...原创 2019-02-02 17:40:03 · 148 阅读 · 0 评论 -
排序方法比较
TYPE 平均时间复杂度 原地排序 稳定性 插入排序 O(N^2) 可以O(1) 稳定 归并排序 O(NlogN) 不可以 O(N) 稳定 快速排序 O(NlogN) 可以O(logN)递归占用堆的空间 不稳定 堆排序 O(NlogN) 可以O(1) 不稳定 ...原创 2019-02-02 16:25:52 · 271 阅读 · 0 评论 -
动态规划解题思路
1,自顶向下分析,构建解题思路树,发现重复求解的元素使用记忆式搜索,然后尝试自底向上解法进一步降低复杂度(斐波那契数组类型题目)原创 2019-03-03 18:49:52 · 305 阅读 · 0 评论