auto commit

This commit is contained in:
CyC2018 2020-05-27 01:18:59 +08:00
parent afcfca0a9d
commit 7bd060f30d
12 changed files with 230 additions and 94 deletions

View File

@ -1432,8 +1432,8 @@ Java 注解是附加在代码中的一些元信息,用于一些工具在编译
## JRE or JDK
- JRE is the JVM program, Java application need to run on JRE.
- JDK is a superset of JRE, JRE + tools for developing java programs. e.g, it provides the compiler "javac"
- JREJava Runtime EnvironmentJava 运行环境的简称 Java 的运行提供了所需的环境它是一个 JVM 程序主要包括了 JVM 的标准实现和一些 Java 基本类库
- JDKJava Development KitJava 开发工具包提供了 Java 的开发及运行环境JDK Java 开发的核心集成了 JRE 以及一些其它的工具比如编译 Java 源码的编译器 javac
# 参考资料

View File

@ -1,4 +1,5 @@
<!-- GFM-TOC -->
* [0. 原理](#0-原理)
* [1. 统计两个数的二进制表示有多少位不同](#1-统计两个数的二进制表示有多少位不同)
* [2. 数组中唯一一个不重复的元素](#2-数组中唯一一个不重复的元素)
* [3. 找出数组中缺失的那个数](#3-找出数组中缺失的那个数)
@ -15,6 +16,8 @@
<!-- GFM-TOC -->
# 0. 原理
**基本原理**
0s 表示一串 01s 表示一串 1
@ -25,31 +28,87 @@ x ^ 1s = ~x x & 1s = x x | 1s = 1s
x ^ x = 0 x & x = x x | x = x
```
- 利用 x ^ 1s = \~x 的特点可以将位级表示翻转利用 x ^ x = 0 的特点可以将三个数中重复的两个数去除只留下另一个数
- 利用 x & 0s = 0 x & 1s = x 的特点可以实现掩码操作一个数 num mask00111100 进行位与操作只保留 num 中与 mask 1 部分相对应的位
- 利用 x | 0s = x x | 1s = 1s 的特点可以实现设值操作一个数 num mask00111100 进行位或操作 num 中与 mask 1 部分相对应的位都设置为 1
利用 x ^ 1s = \~x 的特点可以将一个数的位级表示翻转利用 x ^ x = 0 的特点可以将三个数中重复的两个数去除只留下另一个数
位与运算技巧
```
1^1^2 = 2
```
- n&(n-1) 去除 n 的位级表示中最低的那一位例如对于二进制表示 10110100减去 1 得到 10110011这两个数相与得到 10110000
- n&(-n) 得到 n 的位级表示中最低的那一位-n 得到 n 的反码加 1对于二进制表示 10110100-n 得到 01001100相与得到 00000100
- n-n&(\~n+1) 去除 n 的位级表示中最高的那一位
利用 x & 0s = 0 x & 1s = x 的特点可以实现掩码操作一个数 num mask00111100 进行位与操作只保留 num 中与 mask 1 部分相对应的位
移位运算
```
01011011 &
00111100
--------
00011000
```
- \>\> n 为算术右移相当于除以 2<sup>n</sup>
- \>\>\> n 为无符号右移左边会补上 0
- &lt;&lt; n 为算术左移相当于乘以 2<sup>n</sup>
利用 x | 0s = x x | 1s = 1s 的特点可以实现设值操作一个数 num mask00111100 进行位或操作 num 中与 mask 1 部分相对应的位都设置为 1
```
01011011 |
00111100
--------
01111111
```
**位与运算技巧**
n&(n-1) 去除 n 的位级表示中最低的那一位 1例如对于二进制表示 01011011减去 1 得到 01011010这两个数相与得到 01011010
```
01011011 &
01011010
--------
01011010
```
n&(-n) 得到 n 的位级表示中最低的那一位 1-n 得到 n 的反码加 1也就是 -n=\~n+1例如对于二进制表示 10110100-n 得到 01001100相与得到 00000100
```
10110100 &
01001100
--------
00000100
```
n-(n&(-n)) 则可以去除 n 的位级表示中最低的那一位 1 n&(n-1) 效果一样
**移位运算**
\>\> n 为算术右移相当于除以 2n例如 -7 \>\> 2 = -2
```
11111111111111111111111111111001 >> 2
--------
11111111111111111111111111111110
```
\>\>\> n 为无符号右移左边会补上 0例如 -7 \>\>\> 2 = 1073741822
```
11111111111111111111111111111001 >>> 2
--------
00111111111111111111111111111111
```
<< n 为算术左移相当于乘以 2n-7 << 2 = -28
```
11111111111111111111111111111001 << 2
--------
11111111111111111111111111100100
```
**mask 计算**
要获取 111111111 0 取反即可\~0
要得到只有第 i 位为 1 mask 1 向左移动 i-1 位即可1&lt;&lt;(i-1) 例如 1&lt;&lt;4 得到只有第 5 位为 1 mask 00010000
要得到只有第 i 位为 1 mask 1 向左移动 i-1 位即可1<<(i-1) 例如 1<<4 得到只有第 5 位为 1 mask 00010000
要得到 1 i 位为 1 mask(1&lt;&lt;i)-1 即可例如将 (1&lt;&lt;4)-1 = 00010000-1 = 00001111
要得到 1 i 位为 1 mask(1<<i)-1 即可例如将 (1<<4)-1 = 00010000-1 = 00001111
要得到 1 i 位为 0 mask只需将 1 i 位为 1 mask 取反 \~((1&lt;&lt;i)-1)
要得到 1 i 位为 0 mask只需将 1 i 位为 1 mask 取反 \~((1<<i)-1)
**Java 中的位操作**

View File

@ -34,7 +34,7 @@
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/95903878-725b-4ed9-bded-bc4aae0792a9.jpg"/> </div><br>
广度优先搜索一层一层地进行遍历每层遍历都以上一层遍历的结果作为起点遍历一个距离能访问到的所有节点需要注意的是遍历过的节点不能再次被遍历
广度优先搜索一层一层地进行遍历每层遍历都以上一层遍历的结果作为起点遍历一个距离能访问到的所有节点需要注意的是遍历过的节点不能再次被遍历
第一层
@ -76,6 +76,9 @@
```java
public int shortestPathBinaryMatrix(int[][] grids) {
if (grids == null || grids.length == 0 || grids[0].length == 0) {
return -1;
}
int[][] direction = {{1, -1}, {1, 0}, {1, 1}, {0, -1}, {0, 1}, {-1, -1}, {-1, 0}, {-1, 1}};
int m = grids.length, n = grids[0].length;
Queue<Pair<Integer, Integer>> queue = new LinkedList<>();
@ -87,15 +90,18 @@ public int shortestPathBinaryMatrix(int[][] grids) {
while (size-- > 0) {
Pair<Integer, Integer> cur = queue.poll();
int cr = cur.getKey(), cc = cur.getValue();
if (grids[cr][cc] == 1) {
continue;
}
if (cr == m - 1 && cc == n - 1) {
return pathLength;
}
grids[cr][cc] = 1; // 标记
for (int[] d : direction) {
int nr = cr + d[0], nc = cc + d[1];
if (nr < 0 || nr >= m || nc < 0 || nc >= n || grids[nr][nc] == 1) {
if (nr < 0 || nr >= m || nc < 0 || nc >= n) {
continue;
}
if (nr == m - 1 && nc == n - 1) {
return pathLength + 1;
}
queue.add(new Pair<>(nr, nc));
}
}

View File

@ -827,7 +827,7 @@ https://leetcode.com/problems/rank-scores/description/
| 2 | 4.2 | 2 | 2 |
| 3 | 4.3 | 1 | 1 |
使用连接操作找到某个 score 对应的大于其值的记录
使用连接操作找到某个 score 对应的大于等于其值的记录
```sql
SELECT
@ -890,7 +890,7 @@ ORDER BY
| score | Rank |
| :---: | :--: |
| 4.2 | 1 |
| 4.2 | 2 |
| 4.2 | 1 |
| 4.1 | 2 |
连接情况如下

View File

@ -1021,7 +1021,7 @@ g/re/pglobally search a regular expression and print),使用正则表示式
```html
$ grep [-acinv] [--color=auto] 搜寻字符串 filename
-c 统计个数
-c 统计匹配到行的个数
-i 忽略大小写
-n 输出行号
-v 反向选择也就是显示出没有 搜寻字符串 内容的那一行
@ -1039,7 +1039,7 @@ $ grep -n 'the' regular_express.txt
18:google is the best tools for search keyword
```
示例正则表达式 a{m,n} 用来匹配字符 a m\~n 这里需要将 { } 进行转因为它们在 shell 是有特殊意义的
示例正则表达式 a{m,n} 用来匹配字符 a m\~n 这里需要将 { } 进行转因为它们在 shell 是有特殊意义的
```html
$ grep -n 'a\{2,5\}' regular_express.txt

View File

@ -1,3 +1,10 @@
# 前言
题目来自何海涛. 剑指 Offer[M]. 电子工业出版社, 2012.刷题网站推荐
- [牛客网](https://www.nowcoder.com/ta/coding-interviews?from=cyc_github)
- [Leetcode](https://leetcode-cn.com/problemset/lcof/)
# 目录
@ -78,10 +85,6 @@
- [67. 把字符串转换成整数](67.%20把字符串转换成整数.md)
- [68. 树中两个节点的最低公共祖先](68.%20树中两个节点的最低公共祖先.md)
# 参考文献
何海涛. 剑指 Offer[M]. 电子工业出版社, 2012.

View File

@ -1432,8 +1432,8 @@ Java 注解是附加在代码中的一些元信息,用于一些工具在编译
## JRE or JDK
- JRE is the JVM program, Java application need to run on JRE.
- JDK is a superset of JRE, JRE + tools for developing java programs. e.g, it provides the compiler "javac"
- JREJava Runtime EnvironmentJava 运行环境的简称 Java 的运行提供了所需的环境它是一个 JVM 程序主要包括了 JVM 的标准实现和一些 Java 基本类库
- JDKJava Development KitJava 开发工具包提供了 Java 的开发及运行环境JDK Java 开发的核心集成了 JRE 以及一些其它的工具比如编译 Java 源码的编译器 javac
# 参考资料

View File

@ -1,4 +1,5 @@
<!-- GFM-TOC -->
* [0. 原理](#0-原理)
* [1. 统计两个数的二进制表示有多少位不同](#1-统计两个数的二进制表示有多少位不同)
* [2. 数组中唯一一个不重复的元素](#2-数组中唯一一个不重复的元素)
* [3. 找出数组中缺失的那个数](#3-找出数组中缺失的那个数)
@ -15,6 +16,8 @@
<!-- GFM-TOC -->
# 0. 原理
**基本原理**
0s 表示一串 01s 表示一串 1
@ -25,31 +28,87 @@ x ^ 1s = ~x x & 1s = x x | 1s = 1s
x ^ x = 0 x & x = x x | x = x
```
- 利用 x ^ 1s = \~x 的特点可以将位级表示翻转利用 x ^ x = 0 的特点可以将三个数中重复的两个数去除只留下另一个数
- 利用 x & 0s = 0 x & 1s = x 的特点可以实现掩码操作一个数 num mask00111100 进行位与操作只保留 num 中与 mask 1 部分相对应的位
- 利用 x | 0s = x x | 1s = 1s 的特点可以实现设值操作一个数 num mask00111100 进行位或操作 num 中与 mask 1 部分相对应的位都设置为 1
利用 x ^ 1s = \~x 的特点可以将一个数的位级表示翻转利用 x ^ x = 0 的特点可以将三个数中重复的两个数去除只留下另一个数
位与运算技巧
```
1^1^2 = 2
```
- n&(n-1) 去除 n 的位级表示中最低的那一位例如对于二进制表示 10110100减去 1 得到 10110011这两个数相与得到 10110000
- n&(-n) 得到 n 的位级表示中最低的那一位-n 得到 n 的反码加 1对于二进制表示 10110100-n 得到 01001100相与得到 00000100
- n-n&(\~n+1) 去除 n 的位级表示中最高的那一位
利用 x & 0s = 0 x & 1s = x 的特点可以实现掩码操作一个数 num mask00111100 进行位与操作只保留 num 中与 mask 1 部分相对应的位
移位运算
```
01011011 &
00111100
--------
00011000
```
- \>\> n 为算术右移相当于除以 2<sup>n</sup>
- \>\>\> n 为无符号右移左边会补上 0
- &lt;&lt; n 为算术左移相当于乘以 2<sup>n</sup>
利用 x | 0s = x x | 1s = 1s 的特点可以实现设值操作一个数 num mask00111100 进行位或操作 num 中与 mask 1 部分相对应的位都设置为 1
```
01011011 |
00111100
--------
01111111
```
**位与运算技巧**
n&(n-1) 去除 n 的位级表示中最低的那一位 1例如对于二进制表示 01011011减去 1 得到 01011010这两个数相与得到 01011010
```
01011011 &
01011010
--------
01011010
```
n&(-n) 得到 n 的位级表示中最低的那一位 1-n 得到 n 的反码加 1也就是 -n=\~n+1例如对于二进制表示 10110100-n 得到 01001100相与得到 00000100
```
10110100 &
01001100
--------
00000100
```
n-(n&(-n)) 则可以去除 n 的位级表示中最低的那一位 1 n&(n-1) 效果一样
**移位运算**
\>\> n 为算术右移相当于除以 2n例如 -7 \>\> 2 = -2
```
11111111111111111111111111111001 >> 2
--------
11111111111111111111111111111110
```
\>\>\> n 为无符号右移左边会补上 0例如 -7 \>\>\> 2 = 1073741822
```
11111111111111111111111111111001 >>> 2
--------
00111111111111111111111111111111
```
<< n 为算术左移相当于乘以 2n-7 << 2 = -28
```
11111111111111111111111111111001 << 2
--------
11111111111111111111111111100100
```
**mask 计算**
要获取 111111111 0 取反即可\~0
要得到只有第 i 位为 1 mask 1 向左移动 i-1 位即可1&lt;&lt;(i-1) 例如 1&lt;&lt;4 得到只有第 5 位为 1 mask 00010000
要得到只有第 i 位为 1 mask 1 向左移动 i-1 位即可1<<(i-1) 例如 1<<4 得到只有第 5 位为 1 mask 00010000
要得到 1 i 位为 1 mask(1&lt;&lt;i)-1 即可例如将 (1&lt;&lt;4)-1 = 00010000-1 = 00001111
要得到 1 i 位为 1 mask(1<<i)-1 即可例如将 (1<<4)-1 = 00010000-1 = 00001111
要得到 1 i 位为 0 mask只需将 1 i 位为 1 mask 取反 \~((1&lt;&lt;i)-1)
要得到 1 i 位为 0 mask只需将 1 i 位为 1 mask 取反 \~((1<<i)-1)
**Java 中的位操作**

View File

@ -34,7 +34,7 @@
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/95903878-725b-4ed9-bded-bc4aae0792a9.jpg"/> </div><br>
广度优先搜索一层一层地进行遍历每层遍历都以上一层遍历的结果作为起点遍历一个距离能访问到的所有节点需要注意的是遍历过的节点不能再次被遍历
广度优先搜索一层一层地进行遍历每层遍历都以上一层遍历的结果作为起点遍历一个距离能访问到的所有节点需要注意的是遍历过的节点不能再次被遍历
第一层
@ -76,6 +76,9 @@
```java
public int shortestPathBinaryMatrix(int[][] grids) {
if (grids == null || grids.length == 0 || grids[0].length == 0) {
return -1;
}
int[][] direction = {{1, -1}, {1, 0}, {1, 1}, {0, -1}, {0, 1}, {-1, -1}, {-1, 0}, {-1, 1}};
int m = grids.length, n = grids[0].length;
Queue<Pair<Integer, Integer>> queue = new LinkedList<>();
@ -87,15 +90,18 @@ public int shortestPathBinaryMatrix(int[][] grids) {
while (size-- > 0) {
Pair<Integer, Integer> cur = queue.poll();
int cr = cur.getKey(), cc = cur.getValue();
if (grids[cr][cc] == 1) {
continue;
}
if (cr == m - 1 && cc == n - 1) {
return pathLength;
}
grids[cr][cc] = 1; // 标记
for (int[] d : direction) {
int nr = cr + d[0], nc = cc + d[1];
if (nr < 0 || nr >= m || nc < 0 || nc >= n || grids[nr][nc] == 1) {
if (nr < 0 || nr >= m || nc < 0 || nc >= n) {
continue;
}
if (nr == m - 1 && nc == n - 1) {
return pathLength + 1;
}
queue.add(new Pair<>(nr, nc));
}
}

View File

@ -827,7 +827,7 @@ https://leetcode.com/problems/rank-scores/description/
| 2 | 4.2 | 2 | 2 |
| 3 | 4.3 | 1 | 1 |
使用连接操作找到某个 score 对应的大于其值的记录
使用连接操作找到某个 score 对应的大于等于其值的记录
```sql
SELECT
@ -890,7 +890,7 @@ ORDER BY
| score | Rank |
| :---: | :--: |
| 4.2 | 1 |
| 4.2 | 2 |
| 4.2 | 1 |
| 4.1 | 2 |
连接情况如下

View File

@ -1021,7 +1021,7 @@ g/re/pglobally search a regular expression and print),使用正则表示式
```html
$ grep [-acinv] [--color=auto] 搜寻字符串 filename
-c 统计个数
-c 统计匹配到行的个数
-i 忽略大小写
-n 输出行号
-v 反向选择也就是显示出没有 搜寻字符串 内容的那一行
@ -1039,7 +1039,7 @@ $ grep -n 'the' regular_express.txt
18:google is the best tools for search keyword
```
示例正则表达式 a{m,n} 用来匹配字符 a m\~n 这里需要将 { } 进行转因为它们在 shell 是有特殊意义的
示例正则表达式 a{m,n} 用来匹配字符 a m\~n 这里需要将 { } 进行转因为它们在 shell 是有特殊意义的
```html
$ grep -n 'a\{2,5\}' regular_express.txt

View File

@ -1,3 +1,10 @@
# 前言
题目来自何海涛. 剑指 Offer[M]. 电子工业出版社, 2012.刷题网站推荐
- [牛客网](https://www.nowcoder.com/ta/coding-interviews?from=cyc_github)
- [Leetcode](https://leetcode-cn.com/problemset/lcof/)
# 目录
@ -78,10 +85,6 @@
- [67. 把字符串转换成整数](67.%20把字符串转换成整数.md)
- [68. 树中两个节点的最低公共祖先](68.%20树中两个节点的最低公共祖先.md)
# 参考文献
何海涛. 剑指 Offer[M]. 电子工业出版社, 2012.