Skip to content

Commit 7bd060f

Browse files
committed
auto commit
1 parent afcfca0 commit 7bd060f

12 files changed

+230
-94
lines changed

docs/notes/Java 基础.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1432,8 +1432,8 @@ Java 注解是附加在代码中的一些元信息,用于一些工具在编译
14321432

14331433
## JRE or JDK
14341434

1435-
- JRE is the JVM program, Java application need to run on JRE.
1436-
- JDK is a superset of JRE, JRE + tools for developing java programs. e.g, it provides the compiler "javac"
1435+
- JRE:Java Runtime Environment,Java 运行环境的简称,为 Java 的运行提供了所需的环境。它是一个 JVM 程序,主要包括了 JVM 的标准实现和一些 Java 基本类库。
1436+
- JDK:Java Development Kit,Java 开发工具包,提供了 Java 的开发及运行环境。JDK 是 Java 开发的核心,集成了 JRE 以及一些其它的工具,比如编译 Java 源码的编译器 javac 等。
14371437

14381438
# 参考资料
14391439

docs/notes/Leetcode 题解 - 位运算.md

Lines changed: 75 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
<!-- GFM-TOC -->
2+
* [0. 原理](#0-原理)
23
* [1. 统计两个数的二进制表示有多少位不同](#1-统计两个数的二进制表示有多少位不同)
34
* [2. 数组中唯一一个不重复的元素](#2-数组中唯一一个不重复的元素)
45
* [3. 找出数组中缺失的那个数](#3-找出数组中缺失的那个数)
@@ -15,7 +16,9 @@
1516
<!-- GFM-TOC -->
1617

1718

18-
**基本原理**
19+
# 0. 原理
20+
21+
**基本原理**
1922

2023
0s 表示一串 0,1s 表示一串 1。
2124

@@ -25,31 +28,87 @@ x ^ 1s = ~x x & 1s = x x | 1s = 1s
2528
x ^ x = 0 x & x = x x | x = x
2629
```
2730

28-
- 利用 x ^ 1s = \~x 的特点,可以将位级表示翻转;利用 x ^ x = 0 的特点,可以将三个数中重复的两个数去除,只留下另一个数。
29-
- 利用 x & 0s = 0 和 x & 1s = x 的特点,可以实现掩码操作。一个数 num 与 mask:00111100 进行位与操作,只保留 num 中与 mask 的 1 部分相对应的位。
30-
- 利用 x | 0s = x 和 x | 1s = 1s 的特点,可以实现设值操作。一个数 num 与 mask:00111100 进行位或操作,将 num 中与 mask 的 1 部分相对应的位都设置为 1。
31+
利用 x ^ 1s = \~x 的特点,可以将一个数的位级表示翻转;利用 x ^ x = 0 的特点,可以将三个数中重复的两个数去除,只留下另一个数。
32+
33+
```
34+
1^1^2 = 2
35+
```
36+
37+
利用 x & 0s = 0 和 x & 1s = x 的特点,可以实现掩码操作。一个数 num 与 mask:00111100 进行位与操作,只保留 num 中与 mask 的 1 部分相对应的位。
38+
39+
```
40+
01011011 &
41+
00111100
42+
--------
43+
00011000
44+
```
45+
46+
利用 x | 0s = x 和 x | 1s = 1s 的特点,可以实现设值操作。一个数 num 与 mask:00111100 进行位或操作,将 num 中与 mask 的 1 部分相对应的位都设置为 1。
47+
48+
```
49+
01011011 |
50+
00111100
51+
--------
52+
01111111
53+
```
54+
55+
**位与运算技巧**
3156

32-
位与运算技巧:
57+
n&(n-1) 去除 n 的位级表示中最低的那一位 1。例如对于二进制表示 01011011,减去 1 得到 01011010,这两个数相与得到 01011010。
3358

34-
- n&(n-1) 去除 n 的位级表示中最低的那一位。例如对于二进制表示 10110100,减去 1 得到 10110011,这两个数相与得到 10110000。
35-
- n&(-n) 得到 n 的位级表示中最低的那一位。-n 得到 n 的反码加 1,对于二进制表示 10110100,-n 得到 01001100,相与得到 00000100。
36-
- n-n&(\~n+1) 去除 n 的位级表示中最高的那一位。
59+
```
60+
01011011 &
61+
01011010
62+
--------
63+
01011010
64+
```
3765

38-
移位运算:
66+
n&(-n) 得到 n 的位级表示中最低的那一位 1。-n 得到 n 的反码加 1,也就是 -n=\~n+1。例如对于二进制表示 10110100,-n 得到 01001100,相与得到 00000100。
3967

40-
- \>\> n 为算术右移,相当于除以 2<sup>n</sup>;
41-
- \>\>\> n 为无符号右移,左边会补上 0。
42-
- &lt;&lt; n 为算术左移,相当于乘以 2<sup>n</sup>。
68+
```
69+
10110100 &
70+
01001100
71+
--------
72+
00000100
73+
```
74+
75+
n-(n&(-n)) 则可以去除 n 的位级表示中最低的那一位 1,和 n&(n-1) 效果一样。
76+
77+
**移位运算**
78+
79+
\>\> n 为算术右移,相当于除以 2n,例如 -7 \>\> 2 = -2。
80+
81+
```
82+
11111111111111111111111111111001 >> 2
83+
--------
84+
11111111111111111111111111111110
85+
```
86+
87+
\>\>\> n 为无符号右移,左边会补上 0。例如 -7 \>\>\> 2 = 1073741822。
88+
89+
```
90+
11111111111111111111111111111001 >>> 2
91+
--------
92+
00111111111111111111111111111111
93+
```
94+
95+
<< n 为算术左移,相当于乘以 2n。-7 << 2 = -28。
96+
97+
```
98+
11111111111111111111111111111001 << 2
99+
--------
100+
11111111111111111111111111100100
101+
```
43102

44-
** mask 计算**
103+
**mask 计算**
45104

46105
要获取 111111111,将 0 取反即可,\~0。
47106

48-
要得到只有第 i 位为 1 的 mask,将 1 向左移动 i-1 位即可,1&lt;&lt;(i-1) 。例如 1&lt;&lt;4 得到只有第 5 位为 1 的 mask :00010000。
107+
要得到只有第 i 位为 1 的 mask,将 1 向左移动 i-1 位即可,1<<(i-1) 。例如 1<<4 得到只有第 5 位为 1 的 mask :00010000。
49108

50-
要得到 1 到 i 位为 1 的 mask,(1&lt;&lt;i)-1 即可,例如将 (1&lt;&lt;4)-1 = 00010000-1 = 00001111。
109+
要得到 1 到 i 位为 1 的 mask,(1<<i)-1 即可,例如将 (1<<4)-1 = 00010000-1 = 00001111。
51110

52-
要得到 1 到 i 位为 0 的 mask,只需将 1 到 i 位为 1 的 mask 取反,即 \~((1&lt;&lt;i)-1)。
111+
要得到 1 到 i 位为 0 的 mask,只需将 1 到 i 位为 1 的 mask 取反,即 \~((1<<i)-1)。
53112

54113
**Java 中的位操作**
55114

docs/notes/Leetcode 题解 - 搜索.md

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434

3535
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/95903878-725b-4ed9-bded-bc4aae0792a9.jpg"/> </div><br>
3636

37-
广度优先搜索一层一层地进行遍历,每层遍历都以上一层遍历的结果作为起点,遍历一个距离能访问到的所有节点。需要注意的是,遍历过的节点不能再次被遍历。
37+
广度优先搜索一层一层地进行遍历,每层遍历都是以上一层遍历的结果作为起点,遍历一个距离能访问到的所有节点。需要注意的是,遍历过的节点不能再次被遍历。
3838

3939
第一层:
4040

@@ -76,32 +76,38 @@
7676

7777
```java
7878
public int shortestPathBinaryMatrix(int[][] grids) {
79-
int[][] direction = {{1, -1}, {1, 0}, {1, 1}, {0, -1}, {0, 1}, {-1, -1}, {-1, 0}, {-1, 1}};
80-
int m = grids.length, n = grids[0].length;
81-
Queue<Pair<Integer, Integer>> queue = new LinkedList<>();
82-
queue.add(new Pair<>(0, 0));
83-
int pathLength = 0;
84-
while (!queue.isEmpty()) {
85-
int size = queue.size();
86-
pathLength++;
87-
while (size-- > 0) {
88-
Pair<Integer, Integer> cur = queue.poll();
89-
int cr = cur.getKey(), cc = cur.getValue();
90-
grids[cr][cc] = 1; // 标记
91-
for (int[] d : direction) {
92-
int nr = cr + d[0], nc = cc + d[1];
93-
if (nr < 0 || nr >= m || nc < 0 || nc >= n || grids[nr][nc] == 1) {
79+
if (grids == null || grids.length == 0 || grids[0].length == 0) {
80+
return -1;
81+
}
82+
int[][] direction = {{1, -1}, {1, 0}, {1, 1}, {0, -1}, {0, 1}, {-1, -1}, {-1, 0}, {-1, 1}};
83+
int m = grids.length, n = grids[0].length;
84+
Queue<Pair<Integer, Integer>> queue = new LinkedList<>();
85+
queue.add(new Pair<>(0, 0));
86+
int pathLength = 0;
87+
while (!queue.isEmpty()) {
88+
int size = queue.size();
89+
pathLength++;
90+
while (size-- > 0) {
91+
Pair<Integer, Integer> cur = queue.poll();
92+
int cr = cur.getKey(), cc = cur.getValue();
93+
if (grids[cr][cc] == 1) {
9494
continue;
9595
}
96-
if (nr == m - 1 && nc == n - 1) {
97-
return pathLength + 1;
96+
if (cr == m - 1 && cc == n - 1) {
97+
return pathLength;
98+
}
99+
grids[cr][cc] = 1; // 标记
100+
for (int[] d : direction) {
101+
int nr = cr + d[0], nc = cc + d[1];
102+
if (nr < 0 || nr >= m || nc < 0 || nc >= n) {
103+
continue;
104+
}
105+
queue.add(new Pair<>(nr, nc));
98106
}
99-
queue.add(new Pair<>(nr, nc));
100107
}
101108
}
109+
return -1;
102110
}
103-
return -1;
104-
}
105111
```
106112

107113
## 2. 组成整数的最小平方数数量

docs/notes/Leetcode-Database 题解.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -827,7 +827,7 @@ https://leetcode.com/problems/rank-scores/description/
827827
| 2 | 4.2 | 2 | 2 |
828828
| 3 | 4.3 | 1 | 1 |
829829

830-
使用连接操作找到某个 score 对应的大于其值的记录
830+
使用连接操作找到某个 score 对应的大于等于其值的记录
831831

832832
```sql
833833
SELECT
@@ -890,7 +890,7 @@ ORDER BY
890890
| score | Rank |
891891
| :---: | :--: |
892892
| 4.2 | 1 |
893-
| 4.2 | 2 |
893+
| 4.2 | 1 |
894894
| 4.1 | 2 |
895895

896896
连接情况如下:

docs/notes/Linux.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1021,7 +1021,7 @@ g/re/p(globally search a regular expression and print),使用正则表示式
10211021

10221022
```html
10231023
$ grep [-acinv] [--color=auto] 搜寻字符串 filename
1024-
-c : 统计个数
1024+
-c : 统计匹配到行的个数
10251025
-i : 忽略大小写
10261026
-n : 输出行号
10271027
-v : 反向选择,也就是显示出没有 搜寻字符串 内容的那一行
@@ -1039,7 +1039,7 @@ $ grep -n 'the' regular_express.txt
10391039
18:google is the best tools for search keyword
10401040
```
10411041

1042-
示例:正则表达式 a{m,n} 用来匹配字符 a m\~n 次,这里需要将 { 和 } 进行转移,因为它们在 shell 是有特殊意义的。
1042+
示例:正则表达式 a{m,n} 用来匹配字符 a m\~n 次,这里需要将 { 和 } 进行转义,因为它们在 shell 是有特殊意义的。
10431043

10441044
```html
10451045
$ grep -n 'a\{2,5\}' regular_express.txt

docs/notes/剑指 Offer 题解 - 目录.md

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
# 前言
2+
3+
题目来自《何海涛. 剑指 Offer[M]. 电子工业出版社, 2012.》,刷题网站推荐:
4+
5+
- [牛客网](https://www.nowcoder.com/ta/coding-interviews?from=cyc_github)
6+
- [Leetcode](https://leetcode-cn.com/problemset/lcof/)
7+
18
# 目录
29

310

@@ -78,10 +85,6 @@
7885
- [67. 把字符串转换成整数](67.%20把字符串转换成整数.md)
7986
- [68. 树中两个节点的最低公共祖先](68.%20树中两个节点的最低公共祖先.md)
8087

81-
# 参考文献
82-
83-
何海涛. 剑指 Offer[M]. 电子工业出版社, 2012.
84-
8588

8689

8790

notes/Java 基础.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1432,8 +1432,8 @@ Java 注解是附加在代码中的一些元信息,用于一些工具在编译
14321432

14331433
## JRE or JDK
14341434

1435-
- JRE is the JVM program, Java application need to run on JRE.
1436-
- JDK is a superset of JRE, JRE + tools for developing java programs. e.g, it provides the compiler "javac"
1435+
- JRE:Java Runtime Environment,Java 运行环境的简称,为 Java 的运行提供了所需的环境。它是一个 JVM 程序,主要包括了 JVM 的标准实现和一些 Java 基本类库。
1436+
- JDK:Java Development Kit,Java 开发工具包,提供了 Java 的开发及运行环境。JDK 是 Java 开发的核心,集成了 JRE 以及一些其它的工具,比如编译 Java 源码的编译器 javac 等。
14371437

14381438
# 参考资料
14391439

notes/Leetcode 题解 - 位运算.md

Lines changed: 75 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
<!-- GFM-TOC -->
2+
* [0. 原理](#0-原理)
23
* [1. 统计两个数的二进制表示有多少位不同](#1-统计两个数的二进制表示有多少位不同)
34
* [2. 数组中唯一一个不重复的元素](#2-数组中唯一一个不重复的元素)
45
* [3. 找出数组中缺失的那个数](#3-找出数组中缺失的那个数)
@@ -15,7 +16,9 @@
1516
<!-- GFM-TOC -->
1617

1718

18-
**基本原理**
19+
# 0. 原理
20+
21+
**基本原理**
1922

2023
0s 表示一串 0,1s 表示一串 1。
2124

@@ -25,31 +28,87 @@ x ^ 1s = ~x x & 1s = x x | 1s = 1s
2528
x ^ x = 0 x & x = x x | x = x
2629
```
2730

28-
- 利用 x ^ 1s = \~x 的特点,可以将位级表示翻转;利用 x ^ x = 0 的特点,可以将三个数中重复的两个数去除,只留下另一个数。
29-
- 利用 x & 0s = 0 和 x & 1s = x 的特点,可以实现掩码操作。一个数 num 与 mask:00111100 进行位与操作,只保留 num 中与 mask 的 1 部分相对应的位。
30-
- 利用 x | 0s = x 和 x | 1s = 1s 的特点,可以实现设值操作。一个数 num 与 mask:00111100 进行位或操作,将 num 中与 mask 的 1 部分相对应的位都设置为 1。
31+
利用 x ^ 1s = \~x 的特点,可以将一个数的位级表示翻转;利用 x ^ x = 0 的特点,可以将三个数中重复的两个数去除,只留下另一个数。
32+
33+
```
34+
1^1^2 = 2
35+
```
36+
37+
利用 x & 0s = 0 和 x & 1s = x 的特点,可以实现掩码操作。一个数 num 与 mask:00111100 进行位与操作,只保留 num 中与 mask 的 1 部分相对应的位。
38+
39+
```
40+
01011011 &
41+
00111100
42+
--------
43+
00011000
44+
```
45+
46+
利用 x | 0s = x 和 x | 1s = 1s 的特点,可以实现设值操作。一个数 num 与 mask:00111100 进行位或操作,将 num 中与 mask 的 1 部分相对应的位都设置为 1。
47+
48+
```
49+
01011011 |
50+
00111100
51+
--------
52+
01111111
53+
```
54+
55+
**位与运算技巧**
3156

32-
位与运算技巧:
57+
n&(n-1) 去除 n 的位级表示中最低的那一位 1。例如对于二进制表示 01011011,减去 1 得到 01011010,这两个数相与得到 01011010。
3358

34-
- n&(n-1) 去除 n 的位级表示中最低的那一位。例如对于二进制表示 10110100,减去 1 得到 10110011,这两个数相与得到 10110000。
35-
- n&(-n) 得到 n 的位级表示中最低的那一位。-n 得到 n 的反码加 1,对于二进制表示 10110100,-n 得到 01001100,相与得到 00000100。
36-
- n-n&(\~n+1) 去除 n 的位级表示中最高的那一位。
59+
```
60+
01011011 &
61+
01011010
62+
--------
63+
01011010
64+
```
3765

38-
移位运算:
66+
n&(-n) 得到 n 的位级表示中最低的那一位 1。-n 得到 n 的反码加 1,也就是 -n=\~n+1。例如对于二进制表示 10110100,-n 得到 01001100,相与得到 00000100。
3967

40-
- \>\> n 为算术右移,相当于除以 2<sup>n</sup>;
41-
- \>\>\> n 为无符号右移,左边会补上 0。
42-
- &lt;&lt; n 为算术左移,相当于乘以 2<sup>n</sup>。
68+
```
69+
10110100 &
70+
01001100
71+
--------
72+
00000100
73+
```
74+
75+
n-(n&(-n)) 则可以去除 n 的位级表示中最低的那一位 1,和 n&(n-1) 效果一样。
76+
77+
**移位运算**
78+
79+
\>\> n 为算术右移,相当于除以 2n,例如 -7 \>\> 2 = -2。
80+
81+
```
82+
11111111111111111111111111111001 >> 2
83+
--------
84+
11111111111111111111111111111110
85+
```
86+
87+
\>\>\> n 为无符号右移,左边会补上 0。例如 -7 \>\>\> 2 = 1073741822。
88+
89+
```
90+
11111111111111111111111111111001 >>> 2
91+
--------
92+
00111111111111111111111111111111
93+
```
94+
95+
<< n 为算术左移,相当于乘以 2n。-7 << 2 = -28。
96+
97+
```
98+
11111111111111111111111111111001 << 2
99+
--------
100+
11111111111111111111111111100100
101+
```
43102

44-
** mask 计算**
103+
**mask 计算**
45104

46105
要获取 111111111,将 0 取反即可,\~0。
47106

48-
要得到只有第 i 位为 1 的 mask,将 1 向左移动 i-1 位即可,1&lt;&lt;(i-1) 。例如 1&lt;&lt;4 得到只有第 5 位为 1 的 mask :00010000。
107+
要得到只有第 i 位为 1 的 mask,将 1 向左移动 i-1 位即可,1<<(i-1) 。例如 1<<4 得到只有第 5 位为 1 的 mask :00010000。
49108

50-
要得到 1 到 i 位为 1 的 mask,(1&lt;&lt;i)-1 即可,例如将 (1&lt;&lt;4)-1 = 00010000-1 = 00001111。
109+
要得到 1 到 i 位为 1 的 mask,(1<<i)-1 即可,例如将 (1<<4)-1 = 00010000-1 = 00001111。
51110

52-
要得到 1 到 i 位为 0 的 mask,只需将 1 到 i 位为 1 的 mask 取反,即 \~((1&lt;&lt;i)-1)。
111+
要得到 1 到 i 位为 0 的 mask,只需将 1 到 i 位为 1 的 mask 取反,即 \~((1<<i)-1)。
53112

54113
**Java 中的位操作**
55114

0 commit comments

Comments
 (0)