【Leet Code】74. Search a 2D Matrix---Medium

原创 2015年11月17日 17:03:57

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.

思路:

解决该题目的方法就是对一维数组的二分查找进行变形操作,先对中间行对一维数组的二分查找,如果找到就返回true。

如果没找到,如果target<matrix[mid][0],则令down=mid-1;否则,up=mid+1.

代码实现:

class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        if(matrix.size() < 1 || matrix[0].size() < 1) return false;
        int up = 0, down = matrix.size()-1;
        int mid = 0;
        while(up <= down)
        {
            mid = (up + down)/2;
            if(searchArray(matrix[mid], target)) return true;
            
            if(target < matrix[mid][0]) down = mid -1;
            else up = mid + 1;
        }
        return false;
    }
private:
    bool searchArray(vector<int>& nums, int target){
        int left = 0, right = nums.size() -1;
        int mid = 0;
        while(left <= right)
        {
            mid = (left + right)/2;
            if(target == nums[mid])
                return true;
            if(target > nums[mid])
                left = mid + 1;
            else right = mid - 1;
        }
        return false;
    }
    
};


Leetcode 240 Search a 2D Matrix II (二分法和分治法解决有序二维数组查找)

1.问题描述  写一个高效的算法,从一个m×nm\times n的整数矩阵中查找出给定的值,矩阵具有如下特点:    每一行从左到右递增。 每一列从上到下递增。 2. 方法与思路2.1 二分查找法 ...
  • Jeanphorn
  • Jeanphorn
  • 2015年07月23日 20:41
  • 3113

leet-code最长公共子序列&最长非公共子序列

今天本来是要做最长公共子序列的,很简单的一个问题;被我做着做着做成了最长公共子序列。再也不怕子序列了!...
  • lee_ham
  • lee_ham
  • 2017年07月20日 09:42
  • 295

[LeetCode]62 不同的路径总数

Unique Paths(不同的路径总数)【难度:Medium】 A robot is located at the top-left corner of a m x n grid (marked ...
  • qq_14821023
  • qq_14821023
  • 2016年02月28日 13:31
  • 671

74. Search a 2D Matrix--判断一个数是否在一个矩阵中

Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the follo...
  • yimi1995
  • yimi1995
  • 2017年07月14日 23:07
  • 124

CRF++的使用总结

1,CRF++的指南,以及下载 英文版官网,使用手册的感觉。http://crfpp.googlecode.com/svn/trunk/doc/index.html 下载地址http://...
  • yangsucao520
  • yangsucao520
  • 2014年04月23日 09:15
  • 381

LeetCode题解汇总(C++ Java Python,含题目翻译)

LeetCode题目(含AC Rates):http://oj.leetcode.com/problems/ 我的github:https://github.com/lilong-dream/ 1 T...
  • dragon_dream
  • dragon_dream
  • 2014年02月23日 17:49
  • 34862

leet code判断字符串是否同构

想的思路比较简单。 1.将两个字符串转化为字符数组。 2.建立两个数组表示字符串的结构,相当于总是从1开始的表。 3.设置一个various变量记录编号。字符数组从头开始判断,如果在当前位置之前存在相...
  • u013369502
  • u013369502
  • 2015年05月21日 20:42
  • 535

剑指offer 面试题3:二维数组(矩阵)中数的查找(leetcode 74. Search a 2D Matrix) 题解

剑指offer 面试题 二维数组中的查找 提交网址: http://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e?tpI...
  • yanglr2010
  • yanglr2010
  • 2016年04月23日 20:30
  • 1211

[转]计算机视觉和模式识别的code

Type Topic Name Reference Link Code Structure from motion libmv   http://code.google.com/...
  • u010342929
  • u010342929
  • 2015年05月26日 20:54
  • 745

二维对数搜索法,毕厚杰课本P40的讲解不够详细,这里补充说明。

对预测图像的编码实际上就是寻找最佳匹配图像宏块,找到最佳宏块之后就找到了最佳移动矢量d(dx,dy)。         为减少搜索次数,现在已开发出许多简化算法用来寻找最佳宏块,下面介绍其中的三种。 ...
  • ClaireShi
  • ClaireShi
  • 2013年11月26日 19:41
  • 2875
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Leet Code】74. Search a 2D Matrix---Medium
举报原因:
原因补充:

(最多只允许输入30个字)