微软面试题: LeetCode 240. 搜索二维矩阵 II 出现次数:3

题目描述:

  编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:

1. 每行的元素从左到右升序排列。
2. 每列的元素从上到下升序排列

思路:

  根据 搜索的矩阵 matrix  特性,可以将  target 和矩阵的右上角元素 比较。

1. 要是相等,直接返回 true ,找到;

2. 要是 target 大于 当前的右上角元素 ,说明 target 比当前矩阵的第一行的所有元素都大,将第一行从当前矩阵的搜索空间

删掉,形成新的矩阵搜索空间;

3.要是 target 小于 当前的右上角元素 ,说明  target 比当前矩阵的最后一列的所有元素都小,将最后一列从当前矩阵的搜索

空间删掉,形成新的矩阵搜索空间;

时间 O( m + n)

代码如下:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 class Solution {
 4 public:
 5     bool searchMatrix(vector<vector<int>>& matrix, int target)
 6     {
 7         const int m = matrix.size();
 8         const int n = matrix[0].size();
 9         int i = 0,j = n-1;
10         while (i < m && j >= 0)
11         {
12             if(matrix[i][j] == target)
13             {
14                 return true;
15             }
16             else if(matrix[i][j] > target)
17             {
18                 j--;
19             }
20             else
21             {
22                 i++;
23             }  
24         }
25         return false; 
26     }
27 };

 

posted @ 2021-04-01 15:04  谁在写西加加  阅读(52)  评论(0编辑  收藏  举报