Skip to content

Commit

Permalink
auto commit
Browse files Browse the repository at this point in the history
  • Loading branch information
CyC2018 committed Nov 3, 2020
1 parent d8fa086 commit 6c6bad6
Show file tree
Hide file tree
Showing 14 changed files with 46 additions and 18 deletions.
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
# 21. 调整数组顺序使奇数位于偶数前面

[NowCoder](https://www.nowcoder.com/practice/beb5aa231adc45b2a5dcc5b62c93f593?tpId=13&tqId=11166&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking&from=cyc_github)
## 题目链接

[牛客网](https://www.nowcoder.com/practice/beb5aa231adc45b2a5dcc5b62c93f593?tpId=13&tqId=11166&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking&from=cyc_github)

## 题目描述

需要保证奇数和奇数偶数和偶数之间的相对位置不变这和书本不太一样
需要保证奇数和奇数偶数和偶数之间的相对位置不变这和书本不太一样例如对于 [1,2,3,4,5],调整后得到 [1,3,5,2,4],而不能是 {5,1,3,4,2} 这种相对位置改变的结果

<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/d03a2efa-ef19-4c96-97e8-ff61df8061d3.png" width="200px"> </div><br>

Expand Down
18 changes: 15 additions & 3 deletions docs/notes/29. 顺时针打印矩阵.md
Original file line number Diff line number Diff line change
@@ -1,28 +1,40 @@
# 29. 顺时针打印矩阵

[NowCoder](https://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a?tpId=13&tqId=11172&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking&from=cyc_github)
## 题目链接

[牛客网](https://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a?tpId=13&tqId=11172&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking&from=cyc_github)

## 题目描述

下图的矩阵顺时针打印结果为1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10
按顺时针的方向从外到里打印矩阵的值下图的矩阵打印结果为1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10

<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/image-20201104010349296.png" width="300px"> </div><br>


<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/48517227-324c-4664-bd26-a2d2cffe2bfe.png" width="200px"> </div><br>

## 解题思路

一层一层从外到里打印观察可知每一层打印都有相同的处理步骤唯一不同的是上下左右的边界不同了因此使用四个变量 r1, r2, c1, c2 分别存储上下左右边界值从而定义当前最外层打印当前最外层的顺序从左到右打印最上一行->从上到下打印最右一行->从右到左打印最下一行->从下到上打印最左一行应当注意只有在 r1 != r2 时才打印最下一行也就是在当前最外层的行数大于 1 时才打印最下一行这是因为当前最外层只有一行时继续打印最下一行会导致重复打印打印最左一行也要做同样处理

<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/image-20201104010609223.png" width="500px"> </div><br>

```java
public ArrayList<Integer> printMatrix(int[][] matrix) {
ArrayList<Integer> ret = new ArrayList<>();
int r1 = 0, r2 = matrix.length - 1, c1 = 0, c2 = matrix[0].length - 1;
while (r1 <= r2 && c1 <= c2) {
// 上
for (int i = c1; i <= c2; i++)
ret.add(matrix[r1][i]);
// 右
for (int i = r1 + 1; i <= r2; i++)
ret.add(matrix[i][c2]);
if (r1 != r2)
// 下
for (int i = c2 - 1; i >= c1; i--)
ret.add(matrix[r2][i]);
if (c1 != c2)
// 左
for (int i = r2 - 1; i > r1; i--)
ret.add(matrix[i][c1]);
r1++; r2--; c1++; c2--;
Expand Down
2 changes: 1 addition & 1 deletion docs/notes/3. 数组中重复的数字.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ Output:

要求时间复杂度 O(N),空间复杂度 O(1)。因此不能使用排序的方法也不能使用额外的标记数组

对于这种数组元素在 [0, n-1] 范围内的问题可以将值为 i 的元素调整到第 i 个位置上进行求解本题要求找出重复的数字因此在调整过程中如果第 i 位置上已经有一个值为 i 的元素就可以知道 i 值重复
对于这种数组元素在 [0, n-1] 范围内的问题可以将值为 i 的元素调整到第 i 个位置上进行求解在调整过程中如果第 i 位置上已经有一个值为 i 的元素就可以知道 i 值重复

(2, 3, 1, 0, 2, 5) 为例遍历到位置 4 该位置上的数为 2但是第 2 个位置上已经有一个 2 的值了因此可以知道 2 重复

Expand Down
2 changes: 1 addition & 1 deletion docs/notes/4. 二维数组中的查找.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ Given target = 20, return false.

要求时间复杂度 O(M + N),空间复杂度 O(1)。其中 M 为行数N 列数

该二维数组中的一个数小于它的数一定在其左边大于它的数一定在其下边因此从右上角开始查找就可以根据 target 和当前元素的大小关系来缩小查找区间当前元素的查找区间为左下角的所有元素
该二维数组中的一个数小于它的数一定在其左边大于它的数一定在其下边因此从右上角开始查找就可以根据 target 和当前元素的大小关系来快速地缩小查找区间每次减少一行或者一列的元素当前元素的查找区间为左下角的所有元素

<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/35a8c711-0dc0-4613-95f3-be96c6c6e104.gif" width="400px"> </div><br>

Expand Down
2 changes: 1 addition & 1 deletion docs/notes/剑指 Offer 题解 - 目录.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
- [3. 数组中重复的数字](3.%20数组中重复的数字.md)
- [4. 二维数组中的查找](4.%20二维数组中的查找.md)
- [5. 替换空格](5.%20替换空格.md)
- [21. 调整数组顺序使奇数位于偶数前面](21.%20调整数组顺序使奇数位于偶数前面.md)
- [29. 顺时针打印矩阵](29.%20顺时针打印矩阵.md)
- [50. 第一个只出现一次的字符位置](50.%20第一个只出现一次的字符位置.md)

Expand Down Expand Up @@ -84,6 +83,7 @@

# 排序

- [21. 调整数组顺序使奇数位于偶数前面](21.%20调整数组顺序使奇数位于偶数前面.md)
- [45. 把数组排成最小的数](45.%20把数组排成最小的数.md)
- [51. 数组中的逆序对](51.%20数组中的逆序对.md)

Expand Down
2 changes: 1 addition & 1 deletion docs/notes/剑指 Offer 题解 - 目录2.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
- [3. 数组中重复的数字](notes/3.%20数组中重复的数字.md)
- [4. 二维数组中的查找](notes/4.%20二维数组中的查找.md)
- [5. 替换空格](notes/5.%20替换空格.md)
- [21. 调整数组顺序使奇数位于偶数前面](notes/21.%20调整数组顺序使奇数位于偶数前面.md)
- [29. 顺时针打印矩阵](notes/29.%20顺时针打印矩阵.md)
- [50. 第一个只出现一次的字符位置](notes/50.%20第一个只出现一次的字符位置.md)

Expand Down Expand Up @@ -85,6 +84,7 @@

# 排序

- [21. 调整数组顺序使奇数位于偶数前面](notes/21.%20调整数组顺序使奇数位于偶数前面.md)
- [45. 把数组排成最小的数](notes/45.%20把数组排成最小的数.md)
- [51. 数组中的逆序对](notes/51.%20数组中的逆序对.md)

Expand Down
6 changes: 4 additions & 2 deletions notes/21. 调整数组顺序使奇数位于偶数前面.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
# 21. 调整数组顺序使奇数位于偶数前面

[NowCoder](https://www.nowcoder.com/practice/beb5aa231adc45b2a5dcc5b62c93f593?tpId=13&tqId=11166&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking&from=cyc_github)
## 题目链接

[牛客网](https://www.nowcoder.com/practice/beb5aa231adc45b2a5dcc5b62c93f593?tpId=13&tqId=11166&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking&from=cyc_github)

## 题目描述

需要保证奇数和奇数偶数和偶数之间的相对位置不变这和书本不太一样
需要保证奇数和奇数偶数和偶数之间的相对位置不变这和书本不太一样例如对于 [1,2,3,4,5],调整后得到 [1,3,5,2,4],而不能是 {5,1,3,4,2} 这种相对位置改变的结果

<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/d03a2efa-ef19-4c96-97e8-ff61df8061d3.png" width="200px"> </div><br>

Expand Down
18 changes: 15 additions & 3 deletions notes/29. 顺时针打印矩阵.md
Original file line number Diff line number Diff line change
@@ -1,28 +1,40 @@
# 29. 顺时针打印矩阵

[NowCoder](https://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a?tpId=13&tqId=11172&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking&from=cyc_github)
## 题目链接

[牛客网](https://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a?tpId=13&tqId=11172&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking&from=cyc_github)

## 题目描述

下图的矩阵顺时针打印结果为1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10
按顺时针的方向从外到里打印矩阵的值下图的矩阵打印结果为1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10

<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/image-20201104010349296.png" width="300px"> </div><br>


<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/48517227-324c-4664-bd26-a2d2cffe2bfe.png" width="200px"> </div><br>

## 解题思路

一层一层从外到里打印观察可知每一层打印都有相同的处理步骤唯一不同的是上下左右的边界不同了因此使用四个变量 r1, r2, c1, c2 分别存储上下左右边界值从而定义当前最外层打印当前最外层的顺序从左到右打印最上一行->从上到下打印最右一行->从右到左打印最下一行->从下到上打印最左一行应当注意只有在 r1 != r2 时才打印最下一行也就是在当前最外层的行数大于 1 时才打印最下一行这是因为当前最外层只有一行时继续打印最下一行会导致重复打印打印最左一行也要做同样处理

<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/image-20201104010609223.png" width="500px"> </div><br>

```java
public ArrayList<Integer> printMatrix(int[][] matrix) {
ArrayList<Integer> ret = new ArrayList<>();
int r1 = 0, r2 = matrix.length - 1, c1 = 0, c2 = matrix[0].length - 1;
while (r1 <= r2 && c1 <= c2) {
// 上
for (int i = c1; i <= c2; i++)
ret.add(matrix[r1][i]);
// 右
for (int i = r1 + 1; i <= r2; i++)
ret.add(matrix[i][c2]);
if (r1 != r2)
// 下
for (int i = c2 - 1; i >= c1; i--)
ret.add(matrix[r2][i]);
if (c1 != c2)
// 左
for (int i = r2 - 1; i > r1; i--)
ret.add(matrix[i][c1]);
r1++; r2--; c1++; c2--;
Expand Down
2 changes: 1 addition & 1 deletion notes/3. 数组中重复的数字.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ Output:

要求时间复杂度 O(N),空间复杂度 O(1)。因此不能使用排序的方法也不能使用额外的标记数组

对于这种数组元素在 [0, n-1] 范围内的问题可以将值为 i 的元素调整到第 i 个位置上进行求解本题要求找出重复的数字因此在调整过程中如果第 i 位置上已经有一个值为 i 的元素就可以知道 i 值重复
对于这种数组元素在 [0, n-1] 范围内的问题可以将值为 i 的元素调整到第 i 个位置上进行求解在调整过程中如果第 i 位置上已经有一个值为 i 的元素就可以知道 i 值重复

(2, 3, 1, 0, 2, 5) 为例遍历到位置 4 该位置上的数为 2但是第 2 个位置上已经有一个 2 的值了因此可以知道 2 重复

Expand Down
2 changes: 1 addition & 1 deletion notes/4. 二维数组中的查找.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ Given target = 20, return false.

要求时间复杂度 O(M + N),空间复杂度 O(1)。其中 M 为行数N 列数

该二维数组中的一个数小于它的数一定在其左边大于它的数一定在其下边因此从右上角开始查找就可以根据 target 和当前元素的大小关系来缩小查找区间当前元素的查找区间为左下角的所有元素
该二维数组中的一个数小于它的数一定在其左边大于它的数一定在其下边因此从右上角开始查找就可以根据 target 和当前元素的大小关系来快速地缩小查找区间每次减少一行或者一列的元素当前元素的查找区间为左下角的所有元素

<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/35a8c711-0dc0-4613-95f3-be96c6c6e104.gif" width="400px"> </div><br>

Expand Down
Binary file added notes/pics/image-20201104010349296.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added notes/pics/image-20201104010609223.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion notes/剑指 Offer 题解 - 目录.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
- [3. 数组中重复的数字](3.%20数组中重复的数字.md)
- [4. 二维数组中的查找](4.%20二维数组中的查找.md)
- [5. 替换空格](5.%20替换空格.md)
- [21. 调整数组顺序使奇数位于偶数前面](21.%20调整数组顺序使奇数位于偶数前面.md)
- [29. 顺时针打印矩阵](29.%20顺时针打印矩阵.md)
- [50. 第一个只出现一次的字符位置](50.%20第一个只出现一次的字符位置.md)

Expand Down Expand Up @@ -84,6 +83,7 @@

# 排序

- [21. 调整数组顺序使奇数位于偶数前面](21.%20调整数组顺序使奇数位于偶数前面.md)
- [45. 把数组排成最小的数](45.%20把数组排成最小的数.md)
- [51. 数组中的逆序对](51.%20数组中的逆序对.md)

Expand Down
2 changes: 1 addition & 1 deletion notes/剑指 Offer 题解 - 目录2.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
- [3. 数组中重复的数字](notes/3.%20数组中重复的数字.md)
- [4. 二维数组中的查找](notes/4.%20二维数组中的查找.md)
- [5. 替换空格](notes/5.%20替换空格.md)
- [21. 调整数组顺序使奇数位于偶数前面](notes/21.%20调整数组顺序使奇数位于偶数前面.md)
- [29. 顺时针打印矩阵](notes/29.%20顺时针打印矩阵.md)
- [50. 第一个只出现一次的字符位置](notes/50.%20第一个只出现一次的字符位置.md)

Expand Down Expand Up @@ -85,6 +84,7 @@

# 排序

- [21. 调整数组顺序使奇数位于偶数前面](notes/21.%20调整数组顺序使奇数位于偶数前面.md)
- [45. 把数组排成最小的数](notes/45.%20把数组排成最小的数.md)
- [51. 数组中的逆序对](notes/51.%20数组中的逆序对.md)

Expand Down

0 comments on commit 6c6bad6

Please sign in to comment.