[LeetCode OJ]Search a 2D Matrix

来源:互联网 发布:网络加速器 编辑:程序博客网 时间:2024/06/06 00:19

Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:


Integers in each row are sorted from left to right.

The first integer of each row is greater than the last integer of the previous row.

For example,


Consider the following matrix:

[

  [1,   3,  5,  7],
  [10, 11, 16, 20],
  [23, 30, 34, 50]

]

Given target = 3, return true.


想到了二分法,忘了考虑只有一行情况,一直报错。

class Solution {public:    bool searchMatrix(vector<vector<int> > &matrix, int target) {        int left = 0;          int right = matrix.size()-1;          if(left != right)          {              while(left<=right)              {                  int middle = left + (right-left)/2;                  if(matrix[middle][0] < target)                  {                      left = middle+1;                  }                  else if(matrix[middle][0] > target)                  {                      right = middle-1;                  }                  else                  {                      return true;                  }              }          }          if(right == -1)          {              return false;          }          else          {              int row = right;              int left = 0;              int right = matrix[row].size()-1;              while(left<=right)              {                  int middle = left + (right-left)/2;                  if(matrix[row][middle] < target)                  {                      left = middle+1;                  }                  else if(matrix[row][middle] > target)                  {                      right = middle-1;                  }                  else                  {                      return true;                  }              }              return false;          }     }};


还可以直接做,右上角元素开始遍历。

class Solution {public:    bool searchMatrix(vector<vector<int> > &matrix, int target) {        int i =matrix.size()-1;        int j=0;          int n = matrix.size();        int m = matrix[0].size();          while(i>=0&&j<m)          {              if(matrix[i][j]==target)              {                  return true;              }              else if(matrix[i][j]<target)              {                  j++;              }              else              {                  i--;              }          }          return false;    }};


0 0