2020-08-26|2020-08-26 剑指 Offer 03. 数组中重复的数字 && 04. 二维数组中的查找 C#版
03.数组中重复的数字
找出数组中重复的数字。
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
示例 1:
输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3
#### 解决方法:
1.使用排序算法将数组排序
2.依次对比相邻元素,若有相等元素则返回该元素;若没有则返回false
```
public class Solution {
public int FindRepeatNumber(int[] nums) {
Array.Sort(nums);
for(int i=0;
i
return nums[i];
}
return 0;
}
}
```
### 04. 二维数组中的查找
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
示例:
现有矩阵 matrix 如下:
[
[1,4,7, 11, 15],
[2,5,8, 12, 19],
[3,6,9, 16, 22],
[10, 13, 14, 17, 24],
[18, 21, 23, 26, 30]
]
给定 target = 5,返回 true。
给定 target = 20,返回 false。
#### 解决方法:
0.判断该二维数组是否为空,非空则继续,为空则返回false
1.定位到二维数组中第一列的最后一行or最后一列的第一行(前提为题目中的排序好的二维数组)
2.这里假定从第一列最后一个元素开始(也就是18),从该元素位置开始,判断目标元素的大小与该位置元素的大小,如果比目标元素大则向上位移(row--)
如果比目标元素小则向右位移(column++),如果等于目标元素则返回true
3.如果按顺序访问直到跳出循环还没有找到,则返回false
代码如下
```
public class Solution {
public bool FindNumberIn2DArray(int[][] matrix, int target) {
if(matrix==null || matrix.Length==0 || matrix[0].Length==0){
return false;
}
int rows = matrix.Length, columns = matrix[0].Length;
int row = rows-1, column = 0;
while(row >= 0&& column < columns){
int num = matrix[row][column];
if(num == target){
return true;
}else if(num>target){
row--;
}else{
column++;
}
}
return false;
}
}
【2020-08-26|2020-08-26 剑指 Offer 03. 数组中重复的数字 && 04. 二维数组中的查找 C#版】```
推荐阅读
- 剑指|剑指 Offer 13. 机器人的运动范围(dfs,bfs)
- 剑指offer60.n个骰子的点数
- 剑指offer——最小的K个数
- Android|年后备战金三银四(Android面试吃透这一篇就没有拿不到的offer......)
- 剑指黄昏
- 剑指offer15.二进制中1的个数
- java|阿里工作8年,肝到P8就剩这份学习笔记了,已助朋友拿到10个Offer
- 字节前端面试经验(已拿到offer)
- 女程序员收到阿里offer工资二万六,在互联网界到底有没有歧视女程序员()
- 面试提前准备,offer胜算翻倍!Android 高级开发面试题及答案解析!