数据结构与算法
文章平均质量分 79
数据结构与算法
Lumos`
努力努力再努力
展开
-
LeetCode:输出整体轮廓线和最长子数组长度
LeetCode:描述轮廓线和最长子数组长度目录:输出整体轮廓线返回最长子数组长度求数组中奇数和偶数个数相同的最长子数组1. 输出整体轮廓线给定一个N行3列二维数组, 每一行表示有一座大楼, 一共有N座大楼。 所有大楼的底部都坐落在X轴上, 每一行的三个值(a,b,c)代表每座大楼的从(a,0)点开始, 到 (b,0)点结束, 高度为c。 输入的数据可以保证a<b,且a,...原创 2019-12-19 10:19:04 · 312 阅读 · 0 评论 -
二叉树的遍历(递归,非递归,Morris)
二叉树的遍历目录递归遍历非递归遍历Morris遍历1. 递归遍历递归版遍历只要当前节点不为null,就可以三次回到当前节点。public static void preOrderRecur(Node head) { if (head == null) { return; } System.out.prin...原创 2019-12-17 11:58:29 · 174 阅读 · 0 评论 -
单调栈
单调栈单调栈介绍求最大矩阵的大小烽火台单调栈介绍:若是单调递增栈,则从栈顶到栈底的元素是严格递增的。若是单调递减栈,则从栈顶到栈底的元素是严格递减的。越靠近栈顶的元素越后进栈。想要解决的问题的获取左边离它最近的比它大(小)的和右边离它最近的比它大(小)的。求最大矩阵的大小public static int maxRecSize(int[][] map)...原创 2019-12-15 10:39:40 · 125 阅读 · 0 评论 -
滑动窗口问题
滑动窗口问题滑动窗口解决思路生成窗口最大值数组求一个数组中最大值减去最小值小于或等于 num 的子数组数量1. 滑动窗口解决思路准备一个双端队列,双端队列存放着数组中的下标值。假设当前为 arr[i],则放入规则如下:left 和 right 指针都只会向右移动,不会回退。right 右滑,窗口加数:1)如果 queue 为空,直接把下标 i 放入 queue 中;...原创 2019-12-15 10:13:38 · 233 阅读 · 0 评论 -
数据结构与算法之完全二叉树的节点个数
数据结构与算法之完全二叉树的节点个数目录数据结构与算法之完全二叉树的节点个数1. 数据结构与算法之完全二叉树的节点个数(一)思路先遍历左边界获得树的高度h遍历右子树的左边界,看看到没到最后一层,如果到了,那么左子树是满二叉树,右子树也可以这样分析同理,遍历右子树的左边界,如果没有到最后一层,那么右子树是满二叉树,左子树也可以这样分析。(二) 代码实现public...原创 2019-06-30 10:49:20 · 310 阅读 · 0 评论 -
数据结构与算法之判断一棵树是否为搜索二叉树、判断一棵树是否是完全二叉树
数据结构与算法之判断一棵树是否为搜索二叉树、判断一棵树是否是完全二叉树目录判断一棵树是否为搜索二叉树判断一棵树是否是完全二叉树1. 判断一棵树是否为搜索二叉树 概念:搜索树就是中序遍历的结果是升序,就是搜索二叉树。如下图我们可以改中序遍历非递归版,在打印时机换成比较。即如代码为中序遍历非递归版public static void inOrderUnRecur(Node ...原创 2019-06-29 21:44:10 · 3708 阅读 · 0 评论 -
数据结构与算法之二叉树的序列化和反序列化及判断一棵树是否为平衡二叉树
数据结构与算法之二叉树的序列化和反序列化及判断一棵树是否为平衡而二叉树目录二叉树的序列化和反序列化判断一棵树是否为平衡而二叉树1. 二叉树的序列化和反序列化1. 递归版本序列化和反序列化代码实现// 先序遍历版本序列化public static String serialByPre(Node head) { if (head == null) { ...原创 2019-06-29 16:03:54 · 296 阅读 · 0 评论 -
数据结构与算法之暴力递归改动态规划
数据结构与算法之暴力递归改动态规划目录二维数组最小路径和暴力递归改动态规划解析任意选择数组arr中的数字,看能不能累加得到aim1. 二维数组最小路径和(一) 题目描述(二) 思路递归版如果 i == matrix.length && j == matrix[0].length,说明到了右下角,返回即可。如果 i == matrix.length ...原创 2019-07-04 17:25:08 · 247 阅读 · 0 评论 -
数据结构与算法之母牛生牛
数据结构与算法之母牛生牛、二维数组最小路径和目录字符凭拼接最低字典序数据流中取中位数1. 字符凭拼接最低字典序题目概述:母牛每年生一只小牛,新出生的母牛成长三年后也能每年生出一只母牛,假设不会死。求N年后,母牛的数量思路代码实现public class Code_Cow { public static int cowNumber1(int n) {...原创 2019-07-04 16:02:45 · 310 阅读 · 0 评论 -
剑指offer之31-35题解
剑指offer之31-35题解目录整数中1出现的次数(从1到n整数中1出现的次数)把数组排成最小的数丑数第一个只出现一次的字符位置数组中的逆序对31. 整数中1出现的次数(从1到n整数中1出现的次数)(一)题目描述求出1~ 13的整数中1出现的次数,并算出100~ 1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现...原创 2019-07-09 21:55:14 · 390 阅读 · 0 评论 -
数据结构与算法之二叉树的先序遍历,中序遍历,后序遍历
数据结构与算法之二叉树的先序遍历,中序遍历,后移遍历目录实现二叉树的先序,中序,后序遍历,包括递归方式和非递归方式在二叉树中找到一个节点的后继节点1. 实现二叉树的先序,中序,后序遍历,包括递归方式和非递归方式1. 先序遍历,中序遍历,后序遍历递归版 //先序遍历递归版 public static void preOrderRecur(Node head) { ...原创 2019-06-28 21:32:51 · 2466 阅读 · 0 评论 -
数据结构与算法之递归题目
数据结构与算法之递归题目目录求n!的结果汉若塔问题打印字符串的全部子序列,包括空字符串打印一个字符串的全部排序1. 求n!的结果public static long getFactorial1(int n) { if (n == 1) { return 1L; } return (long) n * getFactorial1(n - 1); }2....原创 2019-07-03 21:12:45 · 421 阅读 · 0 评论 -
剑指offer之46-50题解
剑指offer之41-45题解目录孩子们的游戏求1+2+3+…+n不用加减乘除做加法把字符串转换成整数数组中重复的数字46. 孩子们的游戏(一)题目描述每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开...原创 2019-07-12 17:16:33 · 583 阅读 · 0 评论 -
数据结构与算法之复制含有随机指针节点的链表和两个链表相交的一系列问题
数据结构与算法复制含有随机指针节点的链表和两个链表相交的一系列问题目录复制含有随机指针节点的链表两个链表相交的一系列问题1. 复制含有随机指针节点的链表题目概述思路:创建一个HashMap结构,key放当前Node,value放需要复制的Node。代码实现import java.util.HashMap;public class Code_CopyL...原创 2019-06-27 21:40:46 · 178 阅读 · 0 评论 -
剑指offer之26-30题解
剑指offer之26-30题解目录二叉搜索树与双向链表字符串的排列数组中出现次数超过一半的数字最小的K个数连续子数组的最大和26. 二叉搜索树与双向链表(一)题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。(二)思路(三)代码实现public class Solution { pri...原创 2019-07-08 21:58:49 · 200 阅读 · 0 评论 -
剑指offer之51-55题解
剑指offer之51-55题解目录构建乘积数组正则表达式匹配表示数值的字符串字符流中第一个不重复的字符链表中环的入口节点51. 构建乘积数组(一)题目描述给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1]。不能使用除法。(二)思路(三)代码实现impor...原创 2019-07-14 23:36:19 · 261 阅读 · 0 评论 -
数据结构与算法之KMP算法
数据结构与算法之KMP算法目录KMP算法介绍输入字符串str1,str2,返回字符串str2是否在str1中,在的话在第几位开始1. KMP算法介绍在CSDN上看到一篇写的很好的关于CSDN的介绍,附上链接:https://www.cnblogs.com/SYCstudio/p/7194315.html2. 输入字符串str1,str2,返回字符串str2是否在str1中,在...原创 2019-07-05 14:35:20 · 131 阅读 · 2 评论 -
数据结构与算法之堆排序
数据结构与算法之堆排序目录堆排序介绍代码实现1. 堆排序介绍堆排序(Heapsort)是指利用堆((英语:heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。)这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以说是一种利用堆的概念来排序的选择排...原创 2019-08-08 21:19:51 · 270 阅读 · 0 评论 -
计算机网络知识点补充
计算机网络知识点补充目录:1. HTTP和HTTPS的区别http协议是运行在tcp之上,明文传输,客户端和服务器端都无法验证对方的身份;https是运行在ssl(Secure Socket Layer)上,ssl协议运行于tcp之上。是添加了加密和认证机制的http。二者有以下不同:端口不同:http和HTTPS使用的连接方式不同,端口也不一样。前者是80,后者是443端口。...转载 2019-07-31 22:13:18 · 176 阅读 · 0 评论 -
剑指offer之3-10题解
剑指offer之3-10题解前言:最近开始刷牛客的剑指offer,把刷过的题,代码总结一下。有参考网上的代码,一起加油。目录从尾到头打印链表重建二叉树用两个栈实现队列旋转数组的最小数字斐波那契数列跳台阶变态跳台阶矩阵覆盖3. 从尾到头打印链表(一)题目描述(二) 思路使用栈:栈具有先进先出的特点,在遍历链表时将值按顺序放入栈中,最后出栈的顺序即为逆序。...原创 2019-07-07 14:35:36 · 700 阅读 · 0 评论 -
剑指offer之题解目录(全)
剑指offer之题解目录(全)3. 从尾到头打印链表4. 重建二叉树5. 用两个栈实现队列6. 旋转数组的最小数字7. 斐波那契数列8. 跳台阶9. 变态跳台阶10. 矩阵覆盖11. 二进制中1的个数12. 数值的整数次方13. 调整数组顶序使奇数位于偶数前面14. 链表中第k个节点15. 反转链表16. 合并两个排序的链表17. 树的子结构18, 二叉树的镜像...原创 2019-07-16 10:49:44 · 238 阅读 · 1 评论 -
剑指offer之41-45题解
剑指offer之41-45题解目录和为S的连续正数序列和为S的两个数字左旋转字符串反转单词顺序列扑克牌顺子41. 和为S的连续正数序列(一)题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列...原创 2019-07-11 21:16:45 · 874 阅读 · 0 评论 -
剑指offer之61-66题解
剑指offer之61-66题解目录序列化二叉树二叉搜索树的第k个节点数据流中的中位数滑动窗口的最大值矩阵中的路径机器人的运动范围61. 序列化二叉树(一)题目描述请实现两个函数,分别用来序列化和反序列化二叉树(二)思路二叉树被记录成文件的过程叫作二叉树的序列化,通过文件内容重建原来的二叉树过程叫做二叉树反序列化。通过先序遍历来实现序列化和反序列化过程。序列化二...原创 2019-07-15 23:47:33 · 279 阅读 · 0 评论 -
数据结构与算法之BFPRT算法
数据结构与算法之BFPRT算法目录BFPRT算法介绍BFPRT算法代码实现1. BFPRT算法介绍引用自博客:BFPRT算法O(n)解决第k小的数:https://www.jianshu.com/p/a43b0e1712d1在一大堆数中求其前k大或前k小的问题,简称TOP-K问题。而目前解决TOP-K问题最有效的算法即是BFPRT算法,其又称为中位数的中位数算法,该算法由B...原创 2019-07-06 20:24:38 · 310 阅读 · 0 评论 -
剑指offer之56-60题解
剑指offer之56-60题解目录删除链表中重复的结点二叉树的下一个结点对称的二叉树按之字型顺序打印二叉树把二叉树打印成多行56. 删除链表中重复的结点(一)题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2...原创 2019-07-15 17:06:11 · 353 阅读 · 0 评论 -
数据结构与算法之Manacher算法
数据结构与算法之Manacher算法目录Manacher算法概述Manacher算法代码实现扩展题——如果只能向字符串后面添加字符,怎么让整体串变成回文串,要求填的字符最少1. Manacher算法概述Manacher算法,又叫“马拉车”算法,可以在时间复杂度为O(n)的情况下求解一个字符串的最长回文子串长度的问题。详细请见博客:https://www.jianshu.co...原创 2019-07-05 21:36:50 · 125 阅读 · 0 评论 -
数据结构与算法之RandomPool结构和岛问题
数据结构与算法之RandomPool结构和岛问题目录RandomPool结构岛问题1. RandomPool结构 (一)题目概述(二)思路分析完成上述功能需要创建两个hashmap结构insert操作:直接往里面添加数据即可。getRandom操作:因为知道hashmap里size个数,所以可以根据size得到随机值,取出即可delete操作:因为删除一个元素后会...原创 2019-06-30 21:52:43 · 244 阅读 · 0 评论 -
剑指offer之36-40题解
剑指offer之36-40题解目录两个链表的第一个公共结点数字在排序数组中出现的次数二叉树的深度平衡二叉树数组中只出现一次的数字36. 两个链表的第一个公共结点(一)题目描述输入两个链表,找出它们的第一个公共结点。(二)思路设A的长度为a+c,B的长度为b+c,其中c为尾部公共部分的长度,可知a+c+b = b+c+a.当访问链表A的指针访问到链表尾部时,令它从链...原创 2019-07-10 20:14:16 · 449 阅读 · 0 评论 -
剑指offer之21-25题解
剑指offer之21-25题解目录栈的压入,弹出序列从上往下打印二叉树二叉搜索树的后序遍历序列二叉树中和为某一值的路径复杂链表的复制1. 栈的压入,弹出序列(一)题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一...原创 2019-07-08 19:58:25 · 265 阅读 · 0 评论 -
数据结构与算法之字符凭拼接最低字典序和数据流中取中位数
数据结构与算法之字符凭拼接最低字典序和数据流中取中位数目录字符凭拼接最低字典序数据流中取中位数1. 字符凭拼接最低字典序题目描述思路:创建一个比较器,比较的内容是(o1+o2).compareTo(o2+o1)·,返回的就是两者之和中字典顺序低的那一个。在排序时应用比较器,将字符数组进行排序,然后依次组合即可。代码实现import java.ut...原创 2019-07-03 10:08:11 · 193 阅读 · 0 评论 -
数据结构与算法之打印两个有序链表公共部分和判断一个链表是否具有回文结构
数据结构与算法之打印两个有序链表公共部分和判断一个链表是否具有回文结构目录打印两个有序链表公共部分判断一个链表是否具有回文结构1. 打印两个有序链表公共部分1.问题描述思路代码实现public class Code_PrintCommonPart { public static class Node { public int value; pub...原创 2019-06-27 11:40:45 · 143 阅读 · 0 评论 -
数据结构与算法之选择排序
数据结构与算法之选择排序目录基本介绍选择排序思想代码实现1. 基本介绍选择排序也属于内部排序法,是从排序的数据中,按指定的规则选出某一元素,再依次交换位置后达到排序的目的2. 选择排序思想选择排序(select sorting)也是一种简单的排序方法。它的基本思想是:第一次从arr[0]~arr[n-1]中选取最小值,与arr[0]交换,第二次从arr[1] ~arr...原创 2019-06-20 19:40:55 · 450 阅读 · 0 评论 -
数据结构与算法之冒泡排序
数据结构与算法之冒泡排序目录基本介绍冒泡过程图解代码实现1. 基本介绍冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。优化:因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明...原创 2019-06-20 15:38:19 · 355 阅读 · 0 评论 -
数据结构与算法之时间复杂度详解
数据结构与算法之时间复杂度详解目录排序算法的介绍和分类算法的时间复杂度概念常见的时间复杂度解析平均时间复杂度和最坏时间复杂度空间复杂度介绍1. 排序算法的介绍和分类排序算法的介绍排序也称排序算法(SortAlgorithm),排序是将一组数据,依指定的顺序进行排列的过程。排序的分类:内部排序:指将需要处理的所有数据都加载到内部存储器(内存)中进行排序。外...原创 2019-06-20 11:52:44 · 2205 阅读 · 0 评论 -
数据结构与算法之插入排序
数据结构与算法之插入排序目录插入排序介绍插入排序思路分析代码实现1. 插入排序介绍插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。2. 插入排序思路分析插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序...原创 2019-06-20 21:06:09 · 157 阅读 · 0 评论 -
数据结构与算法之希尔排序
数据结构与算法之希尔排序目录希尔排序介绍希尔排序法的示意图代码实现1. 希尔排序介绍简单插入排序存在的问题:当然需要插入的数是较小的数时,后移的次数明显增加,对效率有影响。希尔排序法介绍希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。希尔排序...原创 2019-06-21 20:26:28 · 641 阅读 · 0 评论 -
数据结构与算法之快速排序
数据结构与算法之快速排序目录快速排序介绍代码实现1. 快速排序介绍快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列 。快速排序法示意图2. 代码实...原创 2019-06-21 21:36:56 · 187 阅读 · 0 评论 -
数据结构与算法之花费铜板最小和利润最大题目
数据结构与算法之花费铜板最小和利润最大题目目录花费铜板最小获得利润最大1. 花费铜板最小题目描述注:PriorityQueue(优先队列),一个基于优先级堆的无界优先级队列。实际上是一个堆(不指定Comparator时默认是小顶堆),通过传入自定义的compara函数可以实现大顶堆。思路生成优先级队列,默认是最小堆创建sum记录总和,cur表示每次弹出两个...原创 2019-07-02 21:16:14 · 223 阅读 · 0 评论 -
数据结构与算法之“之”字型打印矩阵和矩阵中找数
数据结构与算法之“之”字型打印矩阵和矩阵中找数目录“之”字型打印矩阵在行列都排好序的矩阵中找数1. “之”字型打印矩阵题目描述思路:创建A,B两个点,A往右移,B往下移,当移到最右边和最下边则向下移和右移。AB两点连线即为打印路径,添加个flag判断从下打印还是从上打印即可。代码实现public class Code_ZigZagPrintMatrix...原创 2019-06-27 10:55:46 · 212 阅读 · 0 评论 -
数据结构与算法之前缀数
数据结构与算法之前缀数目录前缀数1. 前缀数(一)前缀数描述Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到...原创 2019-07-02 17:55:52 · 627 阅读 · 0 评论