![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
亿咕
Life is a trade-off
展开
-
一大【堆】
1.堆结构就是用数组实现的完全二叉树结构 2.完全二叉树中如果每一颗子树的最小值/最大值在顶根处就是小根堆/大根堆 3.堆的两个核心操作heapInsert和heapify 4.优先队列结构,就是堆结构 用数组形成的堆,利用索引完成比较实现根堆 索引和节点的关系: 当前索引: i 左子节点:2 * i + 1 右子节点:2 * i + 2 父节点:(i - 1) / 2 核心操作heapInsert和heapify的实现 //以大根堆为例 public static void heapInsert(in原创 2021-08-15 10:06:17 · 75 阅读 · 0 评论 -
Java如何实现【归并排序】?
盖言之: 整体就是一个简单递归,左边排序好,右边排序好,让其整体有序,让其整体有序是用外排序 特点: 一种较快稳定的排序 时间复杂度: O(N*logN),可用master公式计算 空间复杂度: O(N),因为会用到一个help辅助空间 稳定性: 稳定 重要性: 很重要,必掌握 编写难度: medium 其他: 归并排序快的原因:并没有浪费比较行为 稳定性的原因:左区域优先(详情见注释) 代码示梨:(注释有宝贝) public static void mergeSort(int []arr){原创 2021-08-12 11:33:59 · 73 阅读 · 0 评论 -
怎么用【master公式】求【递归行为的复杂度】?
前言 master公式(又名“主方法”)是利用分治策略求解特定类型的递归的复杂度的一种技巧性方法,掌握它对于分析递归行为的复杂度很有帮助 使用前提: 每一次递归划分的数据规模是否一样? 公式的使用: 每一次递归划分的数据规模相同 有:T(N) = aT(N/b) + O(N^d) 那么有: 1:若log(b,a) > d,则复杂度为O(N^log(b,a)) 1:若log(b,a) = d,则复杂度为O(N^dlogN) 1:若log(b,a) < d,则复杂度为O(N^d) 书写版:原创 2021-08-12 10:25:01 · 235 阅读 · 0 评论 -
超好用的【对数器】怎么用?
对数器: 核心思想:用一堆随机数测试,用绝对对的方法来验证你的方法 作用: 帮你测试代码是否实现成功 不用再依赖OJ平台辛辛苦苦找题 如何使用: 1:写好你要测试的方法a 2:准备一个任意实现的方法b 3:实现一个随机样本产生器 4:随机样本都拿到方法中运行,匹配两者是否一致 5:如果不一致,则打印样本进行人工干预改进方法a或方法b; 6:当样本数量很多时比对测试依然正确,可以确定方法a正确 补充知识: 1:关于随机数 Math.random();//[0,1)所有小数 Math.random()原创 2021-08-12 09:29:31 · 99 阅读 · 0 评论