LeetCode 240. 搜索二维矩阵

因为矩阵的行和列是排序的(分别从左到右和从上到下),所以在查看任何特定值时,我们可以修剪O(m)O(m)或O(n)O(n)元素。

算法:
首先,我们初始化一个指向矩阵左下角的 (row,col)(row,col) 指针。然后,直到找到目标并返回 true(或者指针指向矩阵维度之外的 (row,col)(row,col) 为止,我们执行以下操作:如果当前指向的值大于目标值,则可以 “向上” 移动一行。 否则,如果当前指向的值小于目标值,则可以移动一列。不难理解为什么这样做永远不会删减正确的答案;因为行是从左到右排序的,所以我们知道当前值右侧的每个值都较大。 因此,如果当前值已经大于目标值,我们知道它右边的每个值会比较大。也可以对列进行非常类似的论证,因此这种搜索方式将始终在矩阵中找到目标(如果存在)。

 

public class Solution
{
    public bool SearchMatrix(int[,] matrix, int target)
    {
        int maxRow = matrix.GetLength(0);
        int maxCol = matrix.GetLength(1);
        if(maxRow == 0 || maxCol == 0)
            return false;
        int value = 0;
        int row = maxRow - 1;
        int col = 0;
        while(row >= 0 && col <= maxCol - 1)
        {
            value = matrix[row,col];
            if(value < target)
                col++;
            else if(value > target)
                row--;
            else
                return true;
        }
        return false; 
    }
}

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章