Skip to content

Commit cdd17e4

Browse files
committed
添加新题解
1 parent 4a1a974 commit cdd17e4

File tree

8 files changed

+754
-1
lines changed

8 files changed

+754
-1
lines changed

docs/.vuepress/config.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,25 @@ const algorithmArr = [
66
'3',
77
'7',
88
'9',
9+
'13',
910
'14',
1011
'16',
1112
'19',
1213
'21',
1314
'24',
15+
'27',
1416
'35',
1517
'53',
18+
'66',
19+
'67',
20+
'70',
1621
'77',
1722
'83',
1823
'96',
1924
'101',
25+
'104',
2026
'112',
27+
'136',
2128
'152',
2229
'162',
2330
'171',
@@ -26,6 +33,7 @@ const algorithmArr = [
2633
'520',
2734
'674',
2835
'704',
36+
'771',
2937
'884',
3038
'938'
3139
]

docs/.vuepress/dist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
Subproject commit dfb3cf76b891b6c0e2a47a34dd2d37068f81fdf2
1+
Subproject commit 9d496f325922756268b95f8ea2ea9caef2d93e20

docs/algorithm/104.md

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
# 画解算法:104. 二叉树的最大深度
2+
3+
## 题目链接
4+
5+
https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/
6+
7+
## 题目描述
8+
9+
给定一个二叉树,找出其最大深度。
10+
11+
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
12+
13+
说明: 叶子节点是指没有子节点的节点。
14+
15+
示例:
16+
给定二叉树 `[3,9,20,null,null,15,7]`
17+
18+
```bash
19+
3
20+
/ \
21+
9 20
22+
/ \
23+
15 7
24+
```
25+
26+
返回它的最大深度 `3`
27+
28+
## 解题方案
29+
30+
### 思路
31+
32+
- 标签:DFS
33+
- 找出终止条件:当前节点为空
34+
- 找出返回值:节点为空时说明高度为0,所以返回0;节点不为空时则分别求左右子树的高度的最大值,同时加1表示当前节点的高度,返回该数值
35+
- 某层的执行过程:在返回值部分基本已经描述清楚
36+
- 时间复杂度:O(n)
37+
38+
### 代码
39+
40+
- Java版本
41+
42+
```Java
43+
/**
44+
* Definition for a binary tree node.
45+
* public class TreeNode {
46+
* int val;
47+
* TreeNode left;
48+
* TreeNode right;
49+
* TreeNode(int x) { val = x; }
50+
* }
51+
*/
52+
class Solution {
53+
public int maxDepth(TreeNode root) {
54+
if(root == null) {
55+
return 0;
56+
} else {
57+
int left = maxDepth(root.left);
58+
int right = maxDepth(root.right);
59+
return Math.max(left, right) + 1;
60+
}
61+
}
62+
}
63+
```
64+
65+
- JavaScript版本
66+
67+
```JavaScript
68+
/**
69+
* Definition for a binary tree node.
70+
* function TreeNode(val) {
71+
* this.val = val;
72+
* this.left = this.right = null;
73+
* }
74+
*/
75+
/**
76+
* @param {TreeNode} root
77+
* @return {number}
78+
*/
79+
var maxDepth = function(root) {
80+
if(!root) {
81+
return 0;
82+
} else {
83+
const left = maxDepth(root.left);
84+
const right = maxDepth(root.right);
85+
return Math.max(left, right) + 1;
86+
}
87+
};
88+
```
89+
90+
91+
### 画解
92+
93+
![fr<x>ame_00001.png](https://i.loli.net/2019/06/26/5d12ca4e2149563662.png)
94+
![fr<x>ame_00002.png](https://i.loli.net/2019/06/26/5d12ca4e1bf6185961.png)
95+
![fr<x>ame_00003.png](https://i.loli.net/2019/06/26/5d12ca4e1e52d13512.png)
96+
![fr<x>ame_00004.png](https://i.loli.net/2019/06/26/5d12ca4e4082152185.png)
97+
![fr<x>ame_00005.png](https://i.loli.net/2019/06/26/5d12ca4e6fc8b63253.png)
98+
99+
100+
101+
102+
<span style="display:block;text-align:center;">后台回复「<strong>算法</strong>」,加入天天算法群</span>
103+
<span style="display:block;text-align:center;">觉得算法直击灵魂,欢迎点击<strong>在看</strong>和<strong>转发</strong></span>
104+
105+
![](https://i.loli.net/2019/05/20/5ce23b33cc01d73486.gif)

docs/algorithm/136.md

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
# 画解算法:136. 只出现一次的数字
2+
3+
## 题目链接
4+
5+
https://leetcode-cn.com/problems/single-number/
6+
7+
## 题目描述
8+
9+
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
10+
11+
说明:
12+
13+
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
14+
15+
示例 1:
16+
17+
```bash
18+
输入: [2,2,1]
19+
输出: 1
20+
```
21+
22+
示例 2:
23+
24+
```bash
25+
输入: [4,1,2,1,2]
26+
输出: 4
27+
```
28+
29+
## 解题方案
30+
31+
### 思路
32+
33+
- 标签:位运算
34+
- 本题根据题意,线性时间复杂度O(n),很容易想到使用Hash映射来进行计算,遍历一次后结束得到结果,但是在空间复杂度上会达到O(n),需要使用较多的额外空间
35+
- 既满足时间复杂度又满足空间复杂度,就要提到位运算中的异或运算XOR,主要因为异或运算有以下几个特点:
36+
- 一个数和0做XOR运算等于本身:a⊕0 = a
37+
- 一个数和其本身做XOR运算等于0:a⊕a = 0
38+
- XOR运算满足交换律和结合律:a⊕b⊕a = (a⊕a)⊕b = 0⊕b = b
39+
- 故而在以上的基础条件上,将所有数字按照顺序做抑或运算,最后剩下的结果即为唯一的数字
40+
- 时间复杂度:O(n),空间复杂度:O(1)
41+
42+
### 代码
43+
44+
- Java版本
45+
46+
```java
47+
class Solution {
48+
public int singleNumber(int[] nums) {
49+
int ans = 0;
50+
for(int num: nums) {
51+
ans ^= num;
52+
}
53+
return ans;
54+
}
55+
}
56+
```
57+
58+
- JavaScript版本
59+
60+
```javascript
61+
/**
62+
* @param {number[]} nums
63+
* @return {number}
64+
*/
65+
var singleNumber = function(nums) {
66+
let ans = 0;
67+
for(const num of nums) {
68+
ans ^= num;
69+
}
70+
return ans;
71+
};
72+
```
73+
74+
### 画解
75+
76+
![fr&lt;x&gt;ame_00001.png](https://i.loli.net/2019/06/26/5d12d6ad7353b66463.png)
77+
![fr&lt;x&gt;ame_00002.png](https://i.loli.net/2019/06/26/5d12d6adad45b42727.png)
78+
![fr&lt;x&gt;ame_00003.png](https://i.loli.net/2019/06/26/5d12d6ada0d2640544.png)
79+
![fr&lt;x&gt;ame_00004.png](https://i.loli.net/2019/06/26/5d12d6ad9ef8340266.png)
80+
![fr&lt;x&gt;ame_00005.png](https://i.loli.net/2019/06/26/5d12d6adab65831401.png)
81+
82+
83+
<span style="display:block;text-align:center;">后台回复「<strong>算法</strong>」,加入天天算法群</span>
84+
<span style="display:block;text-align:center;">觉得算法直击灵魂,欢迎点击<strong>在看</strong>和<strong>转发</strong></span>
85+
86+
![](https://i.loli.net/2019/05/20/5ce23b33cc01d73486.gif)

0 commit comments

Comments
 (0)