Leetcode剑指 Offer 04. 二维数组中的查找
Posted !0 !
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode剑指 Offer 04. 二维数组中的查找相关的知识,希望对你有一定的参考价值。
题目链接:https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof/
解题思路
这题由于是从左到右和从上到下都是递增的,那我们可以从右上角开始找,这样每次判断目标值与当前值的大小
如果相同,直接返回;
如果当前值大于目标值往左移动,使得下一个匹配的值更小;
如果当前值小于目标值往左移动,使得下一个匹配的值更大;
我们的目的就是为了使每次比较时都能排除一些数,所以我们也可以选择从左下角开始(因为每次判断都能排除一些数),而不能从左上角或者右下角,因为每次判断都无法移动下一个要比较的元素。
代码
class Solution {
public boolean findNumberIn2DArray(int[][] matrix, int target) {
if(matrix.length == 0 || matrix[0].length == 0) //特判
return false;
int i = matrix[0].length - 1, j = 0; //从右上角开始
while(i >= 0 && j < matrix.length) { //出边界就结束,表示找不到
if(matrix[j][i] == target) //目标值与当前值相同
return true;
else if(matrix[j][i] > target) //当前值大于目标值
i--;
else //当前值小于目标值
j++;
}
return false;
}
}
复杂度分析
- 时间复杂度:O(m + n)
- 空间复杂度:O(1)
以上是关于Leetcode剑指 Offer 04. 二维数组中的查找的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode(剑指 Offer)- 04. 二维数组中的查找
Leetcode刷题Python剑指 Offer 04. 二维数组中的查找