Skip to content

Commit afcfca0

Browse files
committed
auto commit
1 parent 15324cf commit afcfca0

19 files changed

+150
-321
lines changed

docs/notes/Java 基础.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1141,7 +1141,7 @@ System.out.println(InterfaceExample.x);
11411141

11421142
使用接口:
11431143

1144-
- 需要让不相关的类都实现一个方法,例如不相关的类都可以实现 Compareable 接口中的 compareTo() 方法;
1144+
- 需要让不相关的类都实现一个方法,例如不相关的类都可以实现 Comparable 接口中的 compareTo() 方法;
11451145
- 需要使用多重继承。
11461146

11471147
使用抽象类:

docs/notes/Java 虚拟机.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -521,7 +521,7 @@ public static final int value = 123;
521521
其中解析过程在某些情况下可以在初始化阶段之后再开始,这是为了支持 Java 的动态绑定。
522522

523523
<div data="补充为什么可以支持动态绑定 --> <--"></div>
524-
### 5. 初始化
524+
### 5. 初始化
525525

526526
<div data="modify -->"></div>
527527
初始化阶段才真正开始执行类中定义的 Java 程序代码。初始化阶段是虚拟机执行类构造器 &lt;clinit>() 方法的过程。在准备阶段,类变量已经赋过一次系统要求的初始值,而在初始化阶段,根据程序员通过程序制定的主观计划去初始化类变量和其它资源。

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

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

1817

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

2320
0s 表示一串 0,1s 表示一串 1。
2421

@@ -28,79 +25,23 @@ x ^ 1s = ~x x & 1s = x x | 1s = 1s
2825
x ^ x = 0 x & x = x x | x = x
2926
```
3027

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-
**位与运算技巧**
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。
5631

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

59-
```
60-
01011011 &
61-
01011010
62-
--------
63-
01011010
64-
```
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 的位级表示中最高的那一位。
6537

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

68-
```
69-
10110100 &
70-
01001100
71-
--------
72-
00000100
73-
```
74-
75-
n-(n&(-n)) 则可以去除 n 的位级表示中最低的那一位 1,和 n&(n-1) 效果一样。
76-
77-
**移位运算**
78-
79-
\>\> n 为算术右移,相当于除以 2<sup>n</sup>,例如 -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-
&lt;&lt; n 为算术左移,相当于乘以 2<sup>n</sup>。-7 << 2 = -28。
96-
97-
```
98-
11111111111111111111111111111001 << 2
99-
--------
100-
11111111111111111111111111100100
101-
```
40+
- \>\> n 为算术右移,相当于除以 2<sup>n</sup>;
41+
- \>\>\> n 为无符号右移,左边会补上 0。
42+
- &lt;&lt; n 为算术左移,相当于乘以 2<sup>n</sup>。
10243

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

10546
要获取 111111111,将 0 取反即可,\~0。
10647

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

Lines changed: 22 additions & 28 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

@@ -75,39 +75,33 @@
7575
题目描述:0 表示可以经过某个位置,求解从左上角到右下角的最短路径长度。
7676

7777
```java
78-
public int shortestPathBinaryMatrix(int[][] grids) {
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) {
78+
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) {
9494
continue;
9595
}
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));
96+
if (nr == m - 1 && nc == n - 1) {
97+
return pathLength + 1;
10698
}
99+
queue.add(new Pair<>(nr, nc));
107100
}
108101
}
109-
return -1;
110102
}
103+
return -1;
104+
}
111105
```
112106

113107
## 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 | 1 |
893+
| 4.2 | 2 |
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: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,3 @@
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-
81
# 目录
92

103

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

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

8986

9087

docs/notes/计算机操作系统 - 内存管理.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,6 @@
7373
```
7474

7575
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/eb859228-c0f2-4bce-910d-d9f76929352b.png"/> </div><br>
76-
7776
## 3. 最近未使用
7877

7978
> NRU, Not Recently Used
@@ -89,7 +88,7 @@
8988

9089
NRU 优先换出已经被修改的脏页面(R=0,M=1),而不是被频繁使用的干净页面(R=1,M=0)。
9190

92-
## 4. 先进先出
91+
## 4. 先进先出
9392

9493
> FIFO, First In First Out
9594

notes/67. 把字符串转换成整数.md

Lines changed: 12 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -22,53 +22,20 @@ Output:
2222

2323
```java
2424
public int StrToInt(String str) {
25-
if (str == null)
25+
if (str == null || str.length() == 0)
26+
return 0;
27+
boolean isNegative = str.charAt(0) == '-';
28+
int ret = 0;
29+
for (int i = 0; i < str.length(); i++) {
30+
char c = str.charAt(i);
31+
if (i == 0 && (c == '+' || c == '-')) /* 符号判定 */
32+
continue;
33+
if (c < '0' || c > '9') /* 非法输入 */
2634
return 0;
27-
int result = 0;
28-
boolean negative = false;//是否负数
29-
int i = 0, len = str.length();
30-
/**
31-
* limit 默认初始化为*负的*最大正整数 ,假如字符串表示的是正数
32-
* 由于int的范围为-2147483648~2147483647
33-
* 那么result(在返回之前一直是负数形式)就必须和这个最大正数的负数来比较来判断是否溢出,
34-
*/
35-
int limit = - Integer.MAX_VALUE;
36-
int multmin;
37-
int digit;
38-
39-
if (len > 0) {
40-
char firstChar = str.charAt(0);//首先看第一位
41-
if (firstChar < '0') { // 有可能是 "+" or "-"
42-
if (firstChar == '-') {
43-
negative = true;
44-
limit = Integer.MIN_VALUE;//在负号的情况下,判断溢出的值就变成了 整数的 最小负数了
45-
} else if (firstChar != '+')//第一位不是数字和-只能是+
46-
return 0;
47-
if (len == 1) // Cannot have lone "+" or "-"
48-
return 0;
49-
i++;
50-
}
51-
multmin = limit / 10;
52-
while (i < len) {
53-
digit = str.charAt(i++)-'0';
54-
if (digit < 0 || digit > 9)
55-
return 0;
56-
//判断溢出
57-
if (result < multmin) {
58-
return 0;
59-
}
60-
result *= 10;
61-
if (result < limit + digit) {
62-
return 0;
63-
}
64-
result -= digit;
65-
}
66-
} else {
67-
return 0;
68-
}
69-
//如果是正数就返回-result(result一直是负数)
70-
return negative ? result : -result;
35+
ret = ret * 10 + (c - '0');
7136
}
37+
return isNegative ? -ret : ret;
38+
}
7239
```
7340

7441

notes/Java 基础.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1141,7 +1141,7 @@ System.out.println(InterfaceExample.x);
11411141

11421142
使用接口:
11431143

1144-
- 需要让不相关的类都实现一个方法,例如不相关的类都可以实现 Compareable 接口中的 compareTo() 方法;
1144+
- 需要让不相关的类都实现一个方法,例如不相关的类都可以实现 Comparable 接口中的 compareTo() 方法;
11451145
- 需要使用多重继承。
11461146

11471147
使用抽象类:
@@ -1432,9 +1432,8 @@ Java 注解是附加在代码中的一些元信息,用于一些工具在编译
14321432

14331433
## JRE or JDK
14341434

1435-
- JRE:Java Runtime Environment,java运行环境的简称,为java的运行提供了所需的环境。主要包括了JVM的标准实现和一些java基本类库。
1436-
- JDK:Java Development Kit,java开发工具包,提供了java的开发及运行环境。JDK是java开发的核心,集成了JRE以及一些其他的工具,比如编译 java 源码的编译器 javac等。
1437-
- 因此可以这样认为:JDK>JRE>JVM,JRE支持了java程序的运行,而JDK则同时支持了java程序的开发。
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"
14381437

14391438
# 参考资料
14401439

0 commit comments

Comments
 (0)