Search a 2D Matrix

来源:互联网 发布:淘宝店铺彻底释放 编辑:程序博客网 时间:2024/06/05 05:39

https://oj.leetcode.com/problems/search-a-2d-matrix/


1、题目要求:在一个m×n的矩阵matrix里面查找目标值target,如果查找成功返回true,否则返回false。

矩阵matrix的具有以下性质:

1)矩阵每行的元素从左到右递增排序;

2)每行的第一个元素比上一行的最后一个元素大;

例:假设个定矩阵如下,给定目标值target= 3, 则返回true.

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


2、解题思路:用每行的第一个元素进行二分查找,确定target所在行,然后在所在行进行二分查找;


class Solution {public:    bool searchMatrix(vector<vector<int> > &matrix, int target) {        int n= matrix.size();        int left= 0, right= n-1, mid;        //首先找到target所在的行        while(left<=right)        {            mid= (left+right)/2;            if(target>matrix[mid][0])                left= mid+1;            else if(target<matrix[mid][0])                right= mid-1;            else                return true;        }        //如果target比最小值还小,说明查找失败        if (left == 0)    return false;//此时left保持的就是target插入的位置(行标号),所以我们应该在left的上一行中查找target        int row= left-1;        left= 0, right= matrix[row].size()-1;        while(left<=right)        {            mid= (left+right)/2;            if(target>matrix[row][mid])                left= mid+1;            else if(target<matrix[row][mid])                right= mid-1;            else                return true;        }        return false;    }};


0 0
原创粉丝点击