Leetcode Search a 2D Matrix

来源:互联网 发布:linux ndk 编译的so 编辑:程序博客网 时间:2024/06/01 10:14

题意:给定一个元素按序排列的矩阵,判断某个元素是否在其中。

思路:两次二分搜索,先搜索列,再搜索行。

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

另一种思路是把他当作一维二分查找做。

n * m matrix convert to an array => matrix[x][y] => a[x * m + y]an array convert to n * m matrix => a[x] =>matrix[x / m][x % m];


0 0