Myth
Myth
## K th 问题 以及 二维问题 堆和二分查找方法 **这一点需要对比一下 行列都排序的二维数组的 Kth 问题 `LeetCode:378, 668, 719, 786 ` 如何转换成 二维问题?? 设置两个方向的坐标i j 然后映射到 input的一维数组上 这里,g函数有一个统计的过程,通过count与K进行比较,来缩短区间 [例题](https://github.com/caipengbo/AlgoEx/tree/master/LeetCode/bisearch/kthsmallest) **240题**
## 旋转有序数组 ### 旋转数组中查找某值 ``` 1) everytime check if targe == nums[mid], if so, we find it. 2) otherwise, we check if the first half is in order (i.e. nums[left]
## 二维问题
## 下一个最大的数
## 遍历 ### 三种遍历的递归写法 ### 迭代写法 #### 前序 ```Java List ret = new ArrayList(); Stack stack = new Stack(); TreeNode cur = root; stack.add(cur); while (!stack.isEmpty()) { cur = stack.pop();...
## 根据遍历序列构建树 105 前中(唯一) 106 中后(唯一) 889 前后(不唯一)
## 递归思想 树与其子树 边界:叶子节点 和 空节点 递归中类的成员变量的使用(一种类内全局变量),第297题 递归与自顶向下与自底向上
## 其他 判断两个节点是否同时为空 if (p == null || q == null) return p == q; // 更精简的写法
如果面试题要求处理一棵二又树的遍历序列,则可以先找到二叉树的根节点,再基于根节点把整棵树的遍历序列拆分成左子树对应的子序列和右子树对应的子序列,接下来再递归地处理这两个子序列。本面试题应用的是这种思路,面试题7“重建二叉树"就是这种思路
## Map 是 `Key -Value` 结构,有Map.Entry作为基本单元组成 ### HashMap  HashMap由数组+链表组成的,HashMap中的链表出现越少,性能才会越好。 **HashMap保证键的唯一性必须要让键的元素所在的类(Key)去重写 hashCode()和 equals()方法,hashCode是用于查找使用的,而equals是用于比较两个对象的是否相等的** > 因为自定义的类的hashcode()方法继承于Object类,其hashcode码为默认的**内存地址**,这样即便有相同含义的两个对象,比较也是不相等的 HashMap的原理如下: 1. 利用key的hashCode重新hash计算出当前对象的元素在数组中的下标 2. 存储时,如果出现hash值相同的key,此时有两种情况。(1)如果key相同,则覆盖原始值;(2)如果key不同(出现冲突),则将当前的key-value放入链表中 3. 获取时,直接找到hash值对应的下标,在进一步判断key是否相同,从而找到对应值。 4. 理解了以上过程就不难明白HashMap是如何解决hash冲突的问题,核心就是使用了数组的存储方式,然后将冲突的key的对象放入链表中,一旦发现冲突就在链表中做进一步的对比。 **重写 hashCode 和 equals** ```Java @Override...