Morris树遍历算法 本文主要解决一个问题,如何实现二叉树的前中后序遍历,并满足以下要求: 空间复杂度为O(1); 二叉树的形状不能被破坏(中间过程允许改变其形状)。 通常情况下,我们使用递归和迭代的方式进行遍历。但是由于这两种方式会用到递归栈或用户自定义栈等,空间复杂度为O(n),均不满足上述要求。 Morris Traversal方法可以满足上述两个要求,只需要O(1)的空间复杂度,同时在O(n)时间复杂度内完 2020-09-24 数据结构与算法 总结 二叉树
ArrayList集合 ArrayList当中的常用方法有: public boolean add(E e):向集合当中添加元素,参数的类型和泛型一致。返回值代表添加是否成功。 备注:对于ArrayList集合来说,add添加动作一定是成功的,所以返回值可用可不用。 (但对于其他集合来说,add添加动作不一定成功)。 public E get(int index):从集合当中获取元素,参数是索引编号(从0开始 2020-08-12 Java ArrayList
定义一个标准的类 一个标准的类通常要拥有下面四个组成部分: 所有的成员变量都要使用private关键字修饰 为每一个成员变量编写一对Getter/Setter方法 编写一个无参数的构造方法 编写一个全参数的构造方法 public class Student { private String name; private int age; public Student() 2020-08-11 Java 类
成员变量与局部变量的区别 局部变量和成员变量 定义的位置不一样【重点】 局部变量:在方法的内部 成员变量:在方法的外部,直接写在类当中 作用范围不一样【重点】 局部变量:只有方法当中才可以使用,出了方法就不能再用 成员变量:整个类全都可以通用 默认值不一样【重点】 局部变量:没有默认值,如果要使用,必须手动进行赋值 &ems 2020-08-03 Java 变量
Java中的内存划分 Java的内存需要划分成为5个部分: 栈(stack):存放的是方法中的局部变量。方法的运行一定要在栈当中运行。 堆(Heap):凡是new出来的东西,都在堆当中。 堆内存里面的东西都有一个地址值:16进制 堆内存里面的数据,都有默认值。规则: 2020-07-23 Java 内存
方法重载 对于功能类似的方法来说,因为参数列表不一样,却需要记住那么多不同的方法名,太麻烦。 方法的重载(overload):多个方法的名称一样,但是参数列表不一样。 好处:只需要记住唯一一个方法名称,就可以实现类似的多个功能。 方法的重载与下列因素相关: 参数个数不同 参数类型不同 参数的多类型顺序不同 方法的重载与下列因素无关: 与参数的名称无关 与参数的返回值类型无关 2020-07-22 Java 方法
IDEA常用快捷键 IDEA常用快捷键 快捷键 功能 Alt + Enter 导入包,自动修正代码 Ctrl + Y 删除光标所在行 Ctrl + D 复制光标所在行的内容,插入光标位置下面 Ctrl + Alt + L 格式化代码 Ctrl + / 单行注释,再按取消注释 Ctrl + Shift + / 选中代码注释,多行注释,再按取消注释 Alt + Ins 自动生成代码, t 2020-07-21 总结 IDEA
二分查找算法 二分查找的思想减而治之,即将大规模问题转化成小规模问题。减而治之是分而治之的特例,将大问题划分成若干个子问题以后,最终答案只在其中一个子问题里。 二分查找的基本问题(二分查找模板一) 2020-07-17 数据结构与算法 总结 二分查找
经典排序算法——归并排序 原理:设归并排序的当前区间为R[low...high],分治法的三个步骤是: 分解:将当前区间一分为二,即求分裂点 求解:递归地对两个子区间R[low...mid]和R[mid+1...high]进行归并排序 组合:将已排序的两个子区间R[low...mid]和R[mid+1...high]归并为一个有序的区间R[low...high] 递归的终结条件:子区间的长度为1 2020-07-12 数据结构与算法 经典排序算法 分治法
经典排序算法——快速排序 原理:快速排序,即选定基准数据并找出其正确索引位置的过程。 通过使用分治思想对快速排序算法进行描述。下面对一个典型的子数组nums[p...r]进行快速排序的三步分治过程: 分解:数组nums[p...r]被划分为两个(可能为空)子数组nums[p...q-1]和nums[q+1...r],使得nums[p...q-1]中的每个元素都小于nums[q],而nums[q+1...r 2020-07-08 数据结构与算法 经典排序算法 分治法