二维数组的查找

题目:

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。


//题目思考: 从哪里进行判断比较比较适合,经分析,左下角和右上角进行判断都是可行的办法.为什么不从左上角开始搜寻呢?因为左上角向右和向下都是递增,那么对于一个点,对于向右和向下会产生一个岔路;如果我们选择从左下脚开始搜寻的话,如果大于就向右,如果小于就向下,右上角同理.

 class Solution
        {
            public bool Find(int[][] array, int target)
            {
                bool found = false;
                int rows = array.GetLength(0); //获取行
                int columns = array[0].Length; //获取列

                if (array != null && rows > 0 && columns > 0)
                {
                    int row = 0, column = columns - 1;
                    while (row < rows && column >= 0)
                    {
                        //首先进行比较右上角的数组
                        if (array[row][column] == target)
                        {
                            found = true;
                            break;
                        }
                        else if (array[row][column] > target)
                            --column;
                        else
                            ++row;
                    }
                }
                return found;
            }
        }

顺便一说,C#中对于二维数组的定义,其实应该是string[,],而不是锯齿数组string[][] ( 俗称数组的数组)

锯齿数组和二维数组区别在于:

string[][] 是不规则的,可以理解成元素是 string[] 类型的一维数组(数组的数组)
string[,] 是规则的,可以理解是个矩阵,每个元素都是 string 类型
可以假设,在 JsSerializer 里面有一个方法用 foreach 遍历处理 IEnumerable 的成员,那么你可以试一下代码:
string[][] jagger;
string[,] matrix;
foreach (var item1 in jagger){}
foreach (var item2 in matrix){}
不用运行,用 VS 的智能提示看看两个 var 分别是什么类型,你会发现 item1 的类型是 string[],item2 的类型是 string,
这就可以理解 JsSerializer 处理 string[][] 和 string[,] 的行为了。

顺便一说c#锯齿数组的初始化

int[][] array = {
                      new int []{1,2,3},
                      new int []{2,5,6},
                      new int []{3,6,8},
                      new int []{5,8,10}
                };

二维数组的初始化为:

string[,] arr = new string[,] 
{    
                            { "0","0000","0000","0000"},  
                            { "1","0001","0001","0001"},  
                            { "2","0010","0010","0010"},  
                            { "3","0011","0011","0011"},  
                            { "4","0100","0100","0100"},  
                            { "5","0101","1011","1000"},  
                            {"6","0110","1100","1001"},  
                            { "7","0111","1101","1010"},  
                            { "8","1000","1110","1011"},  
                            { "9","1001","1111","1100"}};  
                            Console.WriteLine(arr[0,0]);  
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值