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

            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;

    }

}

```

你可能感兴趣的:(2020-08-26 剑指 Offer 03. 数组中重复的数字 && 04. 二维数组中的查找 C#版)