数据结构
文章平均质量分 90
E_N_T_J
这个作者很懒,什么都没留下…
展开
-
排序
排序总结:一、O(n^2)时间复杂度的排序算法- 总结:平方级别的排序算法是最简单的排序算法,但是理解这些简单的排序算法有助于学习更高效、更复杂的排序算法,而且这些简单的排序算法很多都是组成复杂排序算法的一部分。- 数据 有/无 关:是指排序算法的时间复杂度是否会随着数据的某些顺序特点而发生变化,有的排序算法无论数据什么样子时间复杂度都是相同的,而有的排序算法会因为数据的特殊性而变得高效,...原创 2020-01-05 13:09:10 · 259 阅读 · 2 评论 -
leetcode链表总结
链表总结:链表的题目一定要把链表画出来,多去画一画,想一想,不会很难,但是要十分注意细节,很容易出错。链表不像数组,数组会结合很多技巧和算法,链表的题只需要常规的去一步一步的思考,考虑清楚边界,头结点和尾结点的处理,考虑清楚下一个节点到底是哪一个,一步一步的即可。链表中考虑清楚边界,需要考虑清楚头结点和尾结点如何处理,常常新建一个节点,该节点指向头结点,这样保持对头结点的访问和处理,把头结...原创 2019-09-01 22:00:41 · 363 阅读 · 0 评论 -
二叉树的非递归遍历
public class BinaryTree{ /** *非递归遍历 */ //先序遍历,且为根左右 public void preOrder(Node root){ if(root == null) return; Stack<Node> stack = new Stack<>(); stack.push(root); while(!s...原创 2019-07-20 16:48:09 · 129 阅读 · 0 评论 -
leetcode数组、字符串常用方法---滑动窗口
1、固定滑动窗口长度leetcode438题class Solution { public List<Integer> findAnagrams(String s, String p) { int sLength = s.length(), pLength = p.length(); if(sLength < pLength) ...原创 2019-06-22 17:19:50 · 497 阅读 · 0 评论 -
动态规划
在谈动态规划的时候可以从递归来谈起,大部分的题目我们总是可以用递归来解决,先来谈谈递归的问题,递归是自顶向下的处理问题,将大问题拆解成小问题(从大问题出发解决整个问题,默认小问题是已经解决了的,然后通过小问题的解得到大问题的解),递归有两个过程,一个是递,一个是归,可以将递归处理问题的过程看做一课树,首先递处理每一层,如果每一层有两种计算逻辑,则树是二叉树,从最上层递归调用开始,处于树的顶端,然后...原创 2019-01-19 11:00:42 · 180 阅读 · 0 评论 -
二分查找
二分查找是一种比较快速的查找方法,也比较常用,二分查找基于数组这种数据结构,并且要求查找的目的数组时有序的,其实看一下二分查找的原理便能理解为何要求是有序的数组。确实,算法第四版是这么写的“二分查找的数组是要求有序的”,但是在做题的过程中发现,有些题目的数组元素时无序的,但是也可以用二分查找,因为二分查找比较快,时间复杂度为O(logN),因此,使用二分查找并非是能在有序数组上使用,只要是在一次迭...原创 2019-01-02 18:47:34 · 1473 阅读 · 0 评论 -
排序初步
常见排序算法:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、三项快速排序、堆排序最重要的是:归并排序、快速排序和三项快速排序、堆排序...原创 2018-12-24 19:16:47 · 359 阅读 · 2 评论 -
二叉搜索树与二叉平衡搜索树
二叉平衡搜索树是一种特殊的二叉搜索树,其保持一定的平衡关系,要求每一个节点的左右子树的高度不会相差超过11.下面是一到二叉平衡搜索树的题,leetcode108题目描述:将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9],...原创 2018-12-11 20:46:48 · 219 阅读 · 0 评论 -
优先队列(优先级队列、堆)
优先队列,又称为优先级队列、堆。优先队列是一种特殊的队列,除了具有队列的先入先出,队列头出,队列尾入的结构特点,优先队列最重要的就是要实现快速得到队列中优先级最高的元素,因此,优先队列有一定的顺序特点,这是一种弱序,即队列头部的那个元素是优先级最高的,我们往往以元素值的大小作为优先级来讨论,比如说,数值大的优先级高,则优先队列元素会按一定规则的大小顺序排列,从而使得在队列头部的元素始终保持数值最大...原创 2018-12-17 19:56:06 · 8181 阅读 · 0 评论 -
链表的归并排序
在对数组进行排序时,归并排序时间复杂度为nlongn,空间复杂度为n;快速排序的时间复杂度是n~nlogn之间,空间复杂度是logn;堆排序的时间复杂度是nlogn,空间复杂度是1.但是在对链表进行排序时,归并排序可以实现常数的空间复杂度,而且时间复杂度依然是nlogn。leetcode148题题目描述:在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。...原创 2018-12-21 20:22:14 · 3573 阅读 · 0 评论 -
二叉树叶子节点的处理
其实对于叶子节点的处理,依旧是通过遍历进行处理,往往使用先序遍历并稍加改动即可,在进行先序遍历时,首先处理中间节点,但进行判断,若是叶子节点,则进行符合题目要求逻辑的处理,若不是叶子节点则不处理;然后递归调用处理其左右子树。 对于递归遍历方法,要多多品味,比较有意思,什么时候停止,每一次进行了什么处理并会产生什么影响,这些是递归中需要思考的。1、leetc...原创 2018-12-10 18:56:07 · 941 阅读 · 1 评论 -
队列
队列有多钟,普通的队列、优先队列,不管什么队列都具有先入先出的特点,java中用实现类LinkedList来生成队列。会使用队列来解决问题,并会实现基本的队列中的方法。1.leetcode933题 最近的请求次数题目描述:写一个 RecentCounter 类来计算最近的请求。它只有一个方法:ping(int t),其中 t 代表以毫秒为单位的某个时间。返回从...原创 2018-12-16 13:59:17 · 203 阅读 · 0 评论 -
二叉树的路径处理问题
路径处理问题,实质上是使用树的遍历方法对树进行遍历,常常采用树的先序遍历方法对树进行遍历,对树的先序遍历方法稍加改动,改动先序遍历时对中间节点的处理逻辑和对左右子树的处理逻辑来实现题目的要求。处理从根节点到每一个叶子节点的路径(即该二叉树的所有路径)上的所有节点, 例如leetcode257,问题描述及代码如下: 问题描述: 给定一个二...原创 2018-12-10 09:31:22 · 363 阅读 · 0 评论 -
二叉树的遍历
二叉树的遍历问题是二叉树的基本核心问题,其他的所有问题基本都是在利用遍历来进行求解,遍历是访问所有的元素并打印或保存访问的元素,而其他问题也是访问所有元素,只不过有特殊的对访问元素的处理操作,因此基本所有问题都是遍历问题的改动。有时二叉树的遍历题目还需要结合集合类的工具,collection中的集合工具对数据进行操作。 二叉树的遍历常见的有先序、中序、后序、...原创 2018-12-07 15:24:57 · 458 阅读 · 0 评论