p95 搜索二维矩阵(leetcode 74)

流过昼夜 提交于 2020-04-06 19:07:11

一:解题思路

这个题目是二分搜索的一个变形题目。这个题目的解题关键在于将二维数组看做成一维数组,然后利用二分的思想不断的进行更新。matrix[r][c],r=mid/n,c=mid%n。其中n为数组的列数。Time:O(log(m*n)),Space:O(1)

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

C++:

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();
        int n = matrix[0].size();
        int low = 0, high = m * n - 1;
        while (low <= high)
        {
            int mid = low + (high - low) / 2;
            int r = mid / n;
            int c = mid % n;
            if (matrix[r][c] < target) low = mid + 1;
            else if (matrix[r][c] > target) high = mid - 1;
            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;
              int n=matrix[0].length;
              int low=0,high=m*n-1;
              while(low<=high)
              {
                  int mid=low+(high-low)/2;
                  int r=mid/n;
                  int c=mid%n;
                  if(matrix[r][c]<target) low=mid+1;
                  else if(matrix[r][c]>target) high=mid-1;
                  else return true;
              }

              return false;
        }
    }
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!