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<nums.Length;i++){
if(nums[i]==nums[i+1])
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;
}
}
```