p7 行列递增的二维数组的搜索 (leetcode 240)

一:解题思路

这个题目的解题的关键在于抓住二维矩阵的规律,从左向右是递增的,从上到下是递增的。得到二维数组的行数(i)和列数(j)。1.将坐标定位到二维数组的右上角,如果目标值target小于此时的二维数组的元素,说明此时二维数组所对应的一整列都大于目标值,此时 j--。2.如果目标值target大于此时的二维数组的元素,说明此时二维数组所对应元素的左边都比target小,此时i++。

二:完整代码示例 (C++版和Java版)

class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) 
    {
        if (matrix.size() == 0 || matrix[0].size() == 0) return false;

        int m = matrix.size(), n = matrix[0].size();//m为二维数组的行数,n为二维数组的列数

        int i = 0, j = n - 1;

        while (i < m&&j >= 0)
        {
            if (matrix[i][j] > target)
            {
                j--;
            }
            else if (matrix[i][j] < target)
            {
                i++;
            }
            else
            {
                return true;
            }
        }

        return false;
    }
};

Java版:

class Solution
{
    public boolean searchMatrix(int[][] matrix, int target)
    {
           if(matrix==null||matrix.length==0) return false;
           if(matrix[0]==null||matrix[0].length==0) return false;

           int m=matrix.length,n=matrix[0].length;

           int i=0,j=n-1;

           while((i<m)&&(j>=0))
           {
               if(matrix[i][j]>target)
               {
                   j--;
               }
               else if(matrix[i][j]<target)
               {
                   i++;
               }
               else
               {
                   return true;
               }
           }
           
           return false;
    }
}

 

posted @ 2020-03-07 20:50  repinkply  阅读(247)  评论(0)    收藏  举报