微软面试题: 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 };