240. 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 ascending from top to bottom.
For example,
Consider the following matrix:
[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30] ]
Given target = 5
, return true
.
Given target = 20
, return false
.
题意:
给出一个m*n的矩阵,给定一个数target,询问target是否在矩阵中。其中矩阵的每一行每一列都是递增的。
解答①:
暴力求解。遍历矩阵,将每一个元素和target对比,直到找到那个值或者遍历结束。代码用二重循环即可实现。
复杂度:
因为遍历数组,所以时间复杂度是O(m*n)。
解答②:
解答①虽然可行但是没有充分利用题目给的每一行每一列递增的条件。利用好这一条性质,寻找target就会变得简单很多。
首先从矩阵的右上角开始进行和target的对比,即开始的时候让row=0,col=len-1和target对比。如果该位置的值比target要大,那么说明target肯定不在当前这一列中;如果该位置的值比target小,那么说明target不在这一行中。
代码:[cpp] view plain
复杂度:
因为最坏情况只对每一行每一列,所以m+n的复杂度。
这一种做法的复杂度是O(m+n),