Java算法体系学习
文章平均质量分 79
算法和数据的体系学习笔记。从基础的数据结构,链表、队列、栈等,逐步进入到高级数据结构,例如加强堆、线段树、并查集、有序表、单调栈等。算法包括常见的图算法,贪心、dp、KMP等。其中还包括一些算法技巧,利用dp的状态压缩,四边形不等式技巧等。
冷奴lengnu
这个作者很懒,什么都没留下…
展开
-
Java算法体系学习(九)二叉树的递归套路(搜索二叉树的判断、满二叉树的判断、平衡二叉树的判断、Morris中序遍历)
文章目录七、二叉树的递归套路1、判断一个树是不是平衡二叉树2、判断一个树是不是搜索二叉树2.1 非递归的中序遍历判断2.2 二叉树的递归套路2.3 Morris中序遍历3、判断一颗树是不是满树七、二叉树的递归套路二叉树的递归套路就是在递归遍历过程中,对于每一个节点,看能够给左树和右树分别要到什么信息,然后加工出自己的信息,层层递归,最后解出问题。适用于只需要自己的左孩子和右孩子的信息就能加工出自己信息的问题,不必去深究左右子树的详细信息。套路,看需要什么信息,就建一个信息类,然后遍历每一个节点,遇原创 2022-01-13 23:07:51 · 239 阅读 · 0 评论 -
Java算法体系学习(八)二叉树的相关问题求解(树的最大宽度,完全二叉树的判断,中序遍历的后继节点,多叉树与二叉树的转换,折纸问题)
文章目录5、求树的最大宽度6、折纸问题(二叉树思想启蒙)7、判断一颗树是不是完全二叉树8、多叉树与二叉树的互换(需要理解递归过程)8.1 多叉树转二叉树8.2 二叉树转多叉树9、给定一个二叉树节点,其中节点指针还包括它的父指针,寻找它中序遍历情况下的下一个节点10、证明先序遍历x的左边和后序遍历x的右边的交集仅仅是x的祖先节点5、求树的最大宽度思路:在层序遍历的基础上,多用三个变量,一个记录当前层的最后一个位置,一个记录下一层的最后一个位置,一个记录当前层的宽度,这样每层的结束时机遍历完都知道。每次遍原创 2022-01-12 21:47:18 · 245 阅读 · 0 评论 -
Java算法体系学习(七)二叉树的遍历递归和非递归实现(先序,中序,后序,层序),序列化和反序列化
文章目录六、二叉树1、二叉树的遍历递归实现(先序,中序,后续)2、二叉树的遍历非递归实现(先序,中序,后续)2.1 先序2.2 后序2.3 中序3、二叉树的层序遍历4 、二叉树的序列化与反序列化4.1 先序的序列化与反序列化4.2 层序的序列化与反序列化六、二叉树二叉树是一种树形结构,树种的每一个位置称为节点,每个节点储存它的值以及它左孩子的引用和右孩子的引用方便起见,二叉树的结构就不用泛型进行实现,直接用整型实现1、二叉树的遍历递归实现(先序,中序,后续)package tree;pub原创 2022-01-11 18:37:50 · 456 阅读 · 0 评论 -
Java算法体系学习(六)链表的相关面试题(复制链表、找中点、快慢指针、寻找有环链表的入环节点、求两个链表的交点、回文链表)
文章目录五、链表的面试题1、快慢指针1.1 给定一个链表头节点,找到链表的中点位置1.2 给定一个链表的头结点,判断是否为回文结构2、链表复制问题3、判断两个有环或者无环链表是否相交,如果有就返回第一个相交节点,如果没有则返回null1. 先判断一个链表是否有环,如果有环就返回第一个入环节点,如果没有就返回null2、判断两个无环链表是否相交3. 判断两个有环链表是否相交4、整合五、链表的面试题对于笔试,不用在意空间复杂度,一切为了时间复杂度对于笔试,时间复杂度放在第一位,一定找到空间最优的方法笔原创 2022-01-07 13:32:42 · 400 阅读 · 0 评论 -
Java算法体系学习(五)堆的应用之最大线段重合问题
最大线段重合问题给定很多线段,每个线段有两个整数[begin,end],表示一条线段的起始位置和结束位置(end大于begin且都非负)规定:重合区域必须大于等于1:例如[1,4]和[4,5]就不算重合输入一个二维数组,数组的每个元素是一个包含两个元素的数组,分别为每个线段begin和end返回线段最多重合区域中线段的个数例如 arr = [[1,3],[2,4],[4,8]]返回2,因为在[2,3]这个范围内有2个连段重合思路:先生成一个线段的类,包含begin和end两个数据根据输原创 2022-01-03 21:46:30 · 565 阅读 · 0 评论 -
Java算法体系学习(四)堆(大根堆、小根堆、堆排序、加强堆)
文章目录四、堆、改进堆、对排序及其应用1、堆和完全二叉树2、用数组实现大根堆3、堆排序4、加强堆(小根堆)四、堆、改进堆、对排序及其应用1、堆和完全二叉树堆(heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:堆中某个结点的值总是不大于或不小于其父结点的值;堆总是一棵完全二叉树。大根堆:根节点的值不小于叶子节点的值,所有子树都是这样小根堆:根节点的值不大于叶子节点的值,所有子树都是这样完全二叉树一棵深度为k的有n个结点的二原创 2021-12-31 21:31:33 · 723 阅读 · 0 评论 -
Java算法体系学习(三)归并排序及其应用(求小和、逆序对等)
文章目录三、归并排序及其应用1、归并排序递归实现2、求小和2.1 两层for循环,O(n2)时间复杂度2.2 通过归并求小和O(N*log2N)3、逆序对4、将逆序对的定义改为i和j为下表,若i < j 时,arr[i] > 2 *arr[j] 就称这是一个逆序对,寻找所有逆序对三、归并排序及其应用1、归并排序递归实现假设桌子上有两沓顺序排好的手牌,每次取两边较小的一个,这样最后的手牌总体就是有序的。归并排序就是这样的思想,假设数组分为左右两部分别有序,新建立一个数组,每次取较小的数放入原创 2021-12-30 22:09:15 · 332 阅读 · 0 评论 -
Java算法体系学习(二)几种基本的数据结构和应用(链表反转、栈模拟队列、队列模拟栈、最小栈等)
文章目录二、一些基本的数据结构及操作1、链表数据结构2、对一个链表进行翻转3、给定一个值,删除链表中与该值相同的所有节点4、用数组实现栈5、用已有栈结构实现pop、push、getMin都是常数的操作6、用数组实现队列7、用队列实现栈8、用栈实现队列9、Master公式(计算递归时间复杂度)10、哈希表和有序表10.1 哈希表10.2 有序表二、一些基本的数据结构及操作1、链表数据结构包括一个数值域和指向下一个节点的引用package list;/** * 单向链表,包括一个value域和原创 2021-12-29 22:45:49 · 416 阅读 · 0 评论 -
Java算法体系学习(一)异或运算及其在题目中应用技巧
文章目录一、异或及相关题目1、不使用额外变量交换数组中两个位置元素数2、一个数组中一个数出现了奇数次,剩下数都出现了偶数次,找到并打印3、给定一个整型的数,提前二进制下最右边的14、一个数组中两种数字出现了奇数次,其余都出现了偶数次,找到并打印这个数5、一个数组中有一个数出现k次,其他数出现了M次(K < M,M > 1,O(N))一、异或及相关题目异或:一种二进制运算,对应位相同为0,不同为10 ^ N = 0N ^ N = 01 ^ N = !N(a ^ b) ^ c = a原创 2021-12-28 18:42:59 · 223 阅读 · 0 评论