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. 二维数组中的查找

Leetcode剑指 Offer 04. 二维数组中的查找

剑指offer 面试题04. 二维数组中的查找

#yyds干货盘点#剑指 Offer 04. 二维数组中的查找

剑指Offer 04. 二维数组中的查找