题目

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

1289
24912
471013
681115

解题思路

从右上角开始查找,如果数字大于目标查找数字,则剔除当前列;当数字小于目标数字时,在目标列往下查找,当查找到列底部或者出现大于目标数字的时候,搜索结束。

代码实现

private static bool Find(int number, int[,] array)
{
    var maxCol = array.GetLength(1);
    var rowIdx = 0;
    var colIdx = maxCol - 1;
    while (rowIdx < maxCol && colIdx > 0)
    {
        var checker = array[rowIdx, colIdx];
        if (checker == number)
        {
            return true;
        }

        if (checker > number)
        {
            colIdx--;
        }

        else if (checker < number)
        {
            rowIdx++;
        }
    }

    return false;
}