auto commit

This commit is contained in:
CyC2018 2018-04-09 16:52:39 +08:00
parent 4e0d9b2955
commit 9cf6122436
2 changed files with 6 additions and 18 deletions

View File

@ -128,7 +128,6 @@ public InitialOrderTest() {
5. 子类(实例变量、普通语句块)
6. 子类(构造函数)
<<<<<<< HEAD
**5. 静态内部类**
内部类的一种,静态内部类不依赖外部类,且不能访问外部类的非 static 变量和方法。
@ -140,17 +139,6 @@ import static com.xxx.ClassName.*
```
在使用静态变量和方法时不用再指明 ClassName从而简化代码但可读性大大降低。
=======
**5. 静态内部类**
内部类的一种,静态内部类不依赖外部类且不能访问外部类的非static变量和方法。
**6. 静态导包**
```java
import static com.xxx.ClassName.*
```
在使用静态变量和方法时不用再指明ClassName从而简化代码但可读性大大降低。
>>>>>>> 5d681ae4519085c2e32d20c9be3e5d55bde62ab1
# 二、Object 通用方法

View File

@ -1793,7 +1793,7 @@ public List<Integer> diffWaysToCompute(String input) {
## 动态规划
递归和动态规划都是将原问题拆成多个子问题然后求解,他们之间最本质的区别是,动态规划保存了子问题的解。
递归和动态规划都是将原问题拆成多个子问题然后求解,他们之间最本质的区别是,动态规划保存了子问题的解,避免重复计算
### 斐波那契数列
@ -1809,7 +1809,7 @@ public List<Integer> diffWaysToCompute(String input) {
dp[N] 即为所求。
考虑到 dp[i] 只与 dp[i - 1] 和 dp[i - 2] 有关,因此可以只用两个变量来存储 dp[i - 1] 和 dp[i - 2] 即可,使得原来的 O(n) 空间复杂度优化为 O(1) 复杂度。
考虑到 dp[i] 只与 dp[i - 1] 和 dp[i - 2] 有关,因此可以只用两个变量来存储 dp[i - 1] 和 dp[i - 2],使得原来的 O(N) 空间复杂度优化为 O(1) 复杂度。
```java
public int climbStairs(int n) {
@ -1915,7 +1915,7 @@ private int rob(int[] nums, int first, int last) {
题目描述:有 N 个 信 和 信封,它们被打乱,求错误装信方式的数量。
定义一个数组 dp 存储错误方式数量dp[i] 表示 i 个信和信封的错误方式数量。假设第 i 个信装到第 j 个信封里面,而第 j 个信装到第 k 个信封里面。根据 i 和 k 是否相等,有两种情况:
定义一个数组 dp 存储错误方式数量dp[i] 表示 i 个信和信封的错误方式数量。假设第 i 个信装到第 j 个信封里面,而第 j 个信装到第 k 个信封里面。根据 i 和 k 是否相等,有两种情况:
- i==k交换 i 和 k 的信后,它们的信和信封在正确的位置,但是其余 i-2 封信有 dp[i-2] 种错误装信的方式。由于 j 有 i-1 种取值,因此共有 (i-1)\*dp[i-2] 种错误装信方式。
- i != k交换 i 和 j 的信后,第 i 个信和信封在正确的位置,其余 i-1 封信有 dp[i-1] 种错误装信方式。由于 j 有 i-1 种取值,因此共有 (n-1)\*dp[i-1] 种错误装信方式。
@ -1936,7 +1936,7 @@ dp[N] 即为所求。
定义一个数组 dp 存储最长递增子序列的长度dp[n] 表示以 S<sub>n</sub> 结尾的序列的最长递增子序列长度。对于一个递增子序列 {S<sub>i1</sub>, S<sub>i2</sub>,...,S<sub>im</sub>},如果 im < n 并且 S<sub>im</sub> < S<sub>n</sub> ,此时 {S<sub>i1</sub>, S<sub>i2</sub>,..., S<sub>im</sub>, S<sub>n</sub>} 为一个递增子序列,递增子序列的长度增加 1。满足上述条件的递增子序列中长度最长的那个递增子序列就是要找的在长度最长的递增子序列上加上 S<sub>n</sub> 就构成了以 S<sub>n</sub> 为结尾的最长递增子序列。因此 dp[n] = max{ dp[i]+1 | S<sub>i</sub> < S<sub>n</sub> && i < n}
因为在求 dp[n] 时可能无法找到一个满足条件的递增子序列,此时 {S<sub>n</sub>} 就构成了递增子序列,因此需要对前面的求解方程做修改,令 dp[n] 最小为 1
因为在求 dp[n] 时可能无法找到一个满足条件的递增子序列,此时 {S<sub>n</sub>} 就构成了递增子序列,需要对前面的求解方程做修改,令 dp[n] 最小为 1
<div align="center"><img src="https://latex.codecogs.com/gif.latex?dp[n]=max\{1,dp[i]+1|S_i<S_n\&\&i<n\}"/></div> <br>
@ -1976,7 +1976,7 @@ len = 3 : [4, 5, 6] => tails[2] = 6
对于一个元素 x
- 如果它大于 tails 数组所有的值,那么把它添加到 tails 后面,表示最长递增子序列长度加 1
- 如果 tails[i-1] < x <= tails[i]那么更新 tails[i] = x
- 如果 tails[i-1] < x <= tails[i]那么更新 tails[i-1] = x
可以看出 tails 数组保持有序,因此在查找 S<sub>i</sub> 位于 tails 数组的位置时就可以使用二分查找。
@ -2014,7 +2014,7 @@ Output: 2
Explanation: The longest chain is [1,2] -> [3,4]
```
对于 (a, b) 和 (c, d) ,如果 b < c则它们可以构成一条链
题目描述:对于 (a, b) 和 (c, d) ,如果 b < c则它们可以构成一条链
```java
public int findLongestChain(int[][] pairs) {