您的位置:首页 > 其它

leetcode刷题 总结 记录 备忘 74

2015-08-05 19:08 288 查看
leetcode74


Search a 2D Matrix

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
.
二分查找,不是特别困难,考虑下二维数组只有一个元素和一维数组只有一个元素的特殊情况就可以了。如果二维数组只有一个元素,直接find这个一维数组即可。如果一维数组只有一个元素,直接等号进行判断,如果不是再根据大小确定下一个二分查找的段即可。
class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        if (matrix.size() == 0)
        return false;
        if (matrix.size() == 1)
        {
            if (find(matrix[0].begin(), matrix[0].end(), target) == matrix[0].end())
            return false;
            else 
            return true;
        }
        
        int beg = 0, end = matrix.size() - 1;
        
        while (beg <= end)
        {
            int mid = (beg + end) / 2;
            if (matrix[mid].size() == 1)
            {
                if (target == matrix[mid][0])
                return true;
                else if (target > matrix[mid][0])
                beg = mid + 1;
                else if (target < matrix[mid][0])
                end = mid - 1;
                
                continue;
            }
            if (target >= *(matrix[mid].begin()) && target <= *(matrix[mid].end()-1))
            {
                if (find(matrix[mid].begin(), matrix[mid].end(), target) != matrix[mid].end())
                return true;
                else
                return false;
            }
            else if (target < *(matrix[mid].begin()))
            {
                end = mid - 1;
            }
            else if (target > *(matrix[mid].end()-1))
            {
                beg = mid + 1;
            }
        }
        return false;
    }
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: