auto commit

This commit is contained in:
CyC2018 2020-11-04 01:20:57 +08:00
parent d8fa086796
commit 6c6bad677c
14 changed files with 46 additions and 18 deletions

View File

@ -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>

View File

@ -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--;

View File

@ -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 重复

View File

@ -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>

View File

@ -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)
@ -84,6 +83,7 @@
# 排序
- [21. 调整数组顺序使奇数位于偶数前面](21.%20调整数组顺序使奇数位于偶数前面.md)
- [45. 把数组排成最小的数](45.%20把数组排成最小的数.md)
- [51. 数组中的逆序对](51.%20数组中的逆序对.md)

View File

@ -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)
@ -85,6 +84,7 @@
# 排序
- [21. 调整数组顺序使奇数位于偶数前面](notes/21.%20调整数组顺序使奇数位于偶数前面.md)
- [45. 把数组排成最小的数](notes/45.%20把数组排成最小的数.md)
- [51. 数组中的逆序对](notes/51.%20数组中的逆序对.md)

View File

@ -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>

View File

@ -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--;

View File

@ -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 重复

View File

@ -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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -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)
@ -84,6 +83,7 @@
# 排序
- [21. 调整数组顺序使奇数位于偶数前面](21.%20调整数组顺序使奇数位于偶数前面.md)
- [45. 把数组排成最小的数](45.%20把数组排成最小的数.md)
- [51. 数组中的逆序对](51.%20数组中的逆序对.md)

View File

@ -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)
@ -85,6 +84,7 @@
# 排序
- [21. 调整数组顺序使奇数位于偶数前面](notes/21.%20调整数组顺序使奇数位于偶数前面.md)
- [45. 把数组排成最小的数](notes/45.%20把数组排成最小的数.md)
- [51. 数组中的逆序对](notes/51.%20数组中的逆序对.md)