算法
文章平均质量分 69
ACJavaBear
欢迎关注我的公众号ACJavaBear,一起学Java
展开
-
必须掌握,二叉树的前中后序遍历(迭代+递归)详细代码
对于二叉树的三种遍历方式,无论是简单的递归写法,还是迭代写法,都是在面试中容易被考到的,所以这篇文章就把这个常考知识点给解释清楚。1.二叉树的前序遍历(LeetCode 144题)前序遍历的关键在于:先遍历根节点,再遍历左子树,再遍历右子树。即:根→左→右(1) 递归写法对于递归写法大家肯定都是非常清楚的,因为它的代码很简单,也比较容易理解,如下:class Solution { List<Integer> res = new ArrayList<>();原创 2021-01-17 15:19:25 · 1041 阅读 · 0 评论 -
Trie树Java模板
TrieTrieTrie 树欢迎关注我的公众号ACJavaBear了解更多精彩内容1.什么是 TrieTrieTrie 树TrieTrieTrie 树,又叫前缀树,也叫字典树,用于统计和保存大量的字符串。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较。简而言之,TrieTrieTrie 树是用来存储和查找字符串的一个集合。2. TrieTrieTrie 树的结构如图(图片来自于百度百科)(1) 根节点 root(2) 子节点 TrieNode该节点是原创 2020-11-23 23:08:53 · 181 阅读 · 0 评论 -
并查集Java代码模板
并查集1.什么是并查集并查集是一种树型的数据结构,用于处理一些不交集的合并及查询问题。它可以支持两种操作(1) 将两个不相交的集合合并(2) 判断两个元素是否在一个集合中两种操作的时间复杂度近乎O(1)O(1)O(1)。2.并查集的存储结构并查集是一种树形结构,换句话说,就是每个集合用一棵树表示。这个集合的编号就是这棵树的树根。我们用一个数组p来存储每个节点的父节点的编号,即 p[x]p[x]p[x] 表示编号为 xxx 的结点的父节点的编号为 p[x]p[x]p[x] 。初始化:把每个点所原创 2020-11-12 23:03:15 · 623 阅读 · 0 评论 -
快速排序与归并排序(Java模板)
一、快速排序1.快排思想(1) 确定分界点,把数组分成两部分。常用的分界点有:数组第一个数,数组最后一个数,数组中间那个数一般我会选用数组中间那个数作为分界点,这样后面的写法也固定了,不容易遇到边界问题。(2) 根据分界点调整数组,使得分界点左边的数都小于等于分界点,分界点右边的数都大于等于分界点方法:利用双指针的移动,左指针在左边大于分界点的数停下,右指针在右边小于分界点的数停下,交换这两个数。(3) 递归处理左右两边。(4) 时间复杂度O(nlogn)O(nlogn)O(nlogn)。原创 2020-11-07 17:54:06 · 402 阅读 · 1 评论 -
前缀和与差分Java代码模板
1.什么是前缀和这里只介绍一维前缀和与二维前缀和即假设有一数列{an}\{ a_n\}{an} ,那么前缀和就可以理解为 a1+a2+a3+...+aia_1 + a_2 + a_3 + ... + a_ia1+a2+a3+...+ai。而前缀和数组即为存储以a1a_1a1为起点,aia_iai为终点的前缀和的数组。举个例子:若b1=a1b_1 = a_1b1=a1b2=a1+a2b_2 = a_1 + a_2b2=a1+a2b3=a1+a2+a3b_3 = a原创 2020-11-07 17:57:11 · 585 阅读 · 0 评论