【matrix】74. 搜索二维矩阵

题目:

 

 

解答:

方法一:

利用有序规律,遍历矩阵

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

        for(int i = 0;i<m-1;i++){
            if(target>=matrix[i][0]&&target<=matrix[i+1][0]){
                if(target==matrix[i+1][0]){
                    return true;
                }
                for(int j = 0;j<n;j++){
                    if(target==matrix[i][j]){
                        return true;
                    }
                }
            }
        }
        for(int j = 0;j<n;j++){
            if(matrix[m-1][j]==target){
                return true;
            }
        }

        return false;
    }
}

方法二:

同样利用有序性

将矩阵构造成一个虚拟数组,然后使用二分查找找target元素

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

    // 二分查找
    int left = 0, right = m * n - 1;
    int pivotIdx, pivotElement;
    while (left <= right) {
      pivotIdx = (left + right) / 2;
        //row = pivotIde/n  col = pivotIdx %n
      pivotElement = matrix[pivotIdx / n][pivotIdx % n];
      if (target == pivotElement) return true;
      else {
        if (target < pivotElement) right = pivotIdx - 1;
        else left = pivotIdx + 1;
      }
    }
    return false;
  }
}
    

 

posted @ 2020-10-17 00:07  3KBLACK  阅读(72)  评论(0)    收藏  举报