leetcode 240 搜索二维矩阵(这个题目的代码同样适用于leetcode 74).

思路:缩小问题规模 (减治)

设矩阵左下角元素 matrix[i][j],它是第 i 行最小值,同时也是第 j 列最大值

若 target < matrix[i][j] (小于第 i 行最小值),则排除第 i 行,令 i--

若 target > matrix[i][j] (大于第 j 列最大值),则排除第 j 列,令 j++

循环 2~3 直到找到 target,或所有行列均被排除

当然也可以从右上角开始

bool searchMatrix(int** matrix, int matrixRowSize, int matrixColSize, int target) {

    int i = matrixRowSize - 1, j = 0;

    while (i >= 0 && j < matrixColSize) {

        if (target < matrix[i][j]) i--;

        else if (target > matrix[i][j]) j++;

        else return true;

    }

 return false;

}

二分:

bool searchMatrix(vector<vector<int>>& matrix, int target) {

      if(!matrix.size())return false;

      int a=matrix.size();

      for(int j=0;j<a;j++)

      {

          int r=matrix[0].size()-1, l=0;

      while(l<=r)

       {    

           int mid=(l+r)>>1;

           if(target<matrix[j][mid])

            r=mid-1;

           else if (target>matrix[j][mid])

           l=mid+1;

           else 

           return true;

       }

    }

    return false;

    }

};

时间复杂度是O(m*logn)(m是行数,n是列数)

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