在行列都排好序的矩阵中找指定值
一、题目
在一个 n * m 的二维数组中,每一行都按照从左到右 非递减 的顺序排序,每一列都按照从上到下 非递减 的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
现有矩阵 matrix 如下:
1 | [ |
给定 target = 5
,返回 true
。
给定 target = 20
,返回 false
。
Leetcode:https://leetcode.cn/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof/
二、思路
本题目思路很简单,要么从右上角的坐标开始寻找:
- 如果此坐标的值为 target,则找到了,返回 true
- 如果此坐标的值大于 target,则应该让列减减,因为列是非递减的顺序排好序的。
- 如果此坐标的值大于 target,则应该让行加加,因为行也是非递减的顺序排好序的
要么从左下角的坐标开始寻找,思路同上。
就是不能从左上角或者右下角找,因为假如当前元素大于或者小于 target 了,都不知道按行走,还是按列走了。而且硬走的话,时间复杂度变为了 O(m*n)
。而我们需要的时间复杂度为 O(m+n)
三、代码
1 | #include <vector> |