【ACM从零开始】LeetCode OJ-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.

题目大意:编写在一个m*n矩阵里快速查找指定元素的算法。这个矩阵有如下属性:1.每一行的元素从左向右递增2.下一行的每个元素比上一行的任意元素都大

解题思路:这就是一个简单的查找问题,用二分法即可。大致过程是先对所有行的尾元素进行二分查找,再对列进行二分查找。但是使用这种方式无法设定查找的结束条件,比如例子中的矩阵,查找“16”这个元素,如果使用二分法则会在第一行去查找,而事实上“16”在第二行,所以这里直接去遍历就好了。

AC代码:

class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        int m = matrix.size();
        int n = matrix[0].size();
        int row = 0; 
        int col = n - 1; 
        while (m > row && col >= 0){ 
            if (target == matrix[row][col]){ 
                return true; 
            } 
            if (target > matrix[row][col]){ 
                row++; 
            }else if (target < matrix[row][col]){ 
                col--;
            } 
        } 
        return false; 
    }
};

时间: 2024-08-03 02:19:51

【ACM从零开始】LeetCode OJ-Search a 2D Matrix的相关文章

【Leetcode】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 ro

[LeetCode] 240. Search a 2D Matrix II 搜索一个二维矩阵 II

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 in ascending from left to right. Integers in each column are sorted in ascending from top to bottom.

[LeetCode][JavaScript]Search a 2D Matrix II

Search a 2D Matrix II 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 in ascending from left to right. Integers in each column are sorted in ascendin

[LeetCode][JavaScript]Search a 2D Matrix

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

leetcode 【Search a 2D Matrix 】python 实现

题目: 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 previou

[LeetCode#240] Search a 2D Matrix II

Problem: 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 in ascending from left to right. Integers in each column are sorted in ascending from top to

【Leetcode】Search a 2D Matrix II

题目链接:https://leetcode.com/problems/search-a-2d-matrix-ii/ 题目: 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 in ascending from left to right. Intege

leetcode之Search a 2D Matrix

写在前面的话----- 1:师兄给的豆瓣上关于leetcode上题目的分类.http://www.douban.com/note/330562764/?qq-pf-to=pcqq.c2c 2:上周五老板给开会,针对毕设的事情问了我70分钟,其中不乏刁难的成分.但是转换角度,这样可以督促自己学术严谨.论文是一方面,工作是非常重要的,就像师兄说的一开始不能给自己定的目标太低,否则真的就会有一个低的起点.下面是引用师兄的话: 学习这种事情不要认为你以后不从事这个就不学了. 第一你可能真的会干技术 第二

[LeetCode] 74. 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 ro

[二分搜索] leetcode 240 Search a 2D Matrix II

problem:https://leetcode.com/problems/search-a-2d-matrix-ii 经典双指针二分查找题目. class Solution { public: bool searchMatrix(vector<vector<int>>& matrix, int target) { int m = matrix.size(); if(!m) return false; int n = matrix[0].size(); if(!n) ret