LeetCode 74. 搜索二维矩阵 Java解法 打败99%

本文深入讲解了一种在二维矩阵中查找特定目标值的高效算法。通过确定行范围并使用二分查找,实现了O(logn)的时间复杂度。文章详细解释了为何从右上角开始搜索,并提供了完整的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
这题就比较简单了都。因为下一个行的头一个比上一行的最后一个还要大,那么我们先确定行的范围,然后进行二分查找就行。,那么从哪里开始找?
从右上角的开始找,右上角的元素大于target,那么可能的值就是这一行了,可以开始做二分查找了,如果target大于右上角的值,那么就可以忽略这一行了,直接去判断下一行的最后一个元素了,因为最后一个元素就是当前行的最大元素,如果这都不能比target大,那么别的元素肯定是只会差距更大的,没有比较的必要了。
一下代码有注释,你可以跟着注释来看看代码的实现。

Show the code:

class Solution {
	public boolean searchMatrix(int[][] matrix, int target) {
//        判断是否是空数组
        if (matrix == null || matrix.length == 0){
            return false;
        }
        int len = matrix.length;
        int rowLen = matrix[0].length;

//        判断行的数据是否为空。
        if (rowLen == 0) {
            return false;
        }

//        先判断目标值可能是在那一行中。
        int targetRow = 0;
        for (int i = 0; i < len; ++i) {
            if (target <= matrix[i][rowLen - 1]) {
                targetRow = i;
                break;
            }
        }

//      利用二分法查找是否存在目标值,二分法这里注意,循环的条件是 start <= end;还有一个就是需要中点的取值的表达式需要注意。
        int start = 0;
        int end = rowLen - 1;
        while (start <= end) {
            int middle = start + ((end - start) >> 1);
            if (matrix [targetRow][middle] > target) {
                end = middle - 1;
            } else if (matrix [targetRow][middle] < target) {
                start = middle + 1;
            } else {
                return true;
            }
        }
        return false;
   	}
}

时间就是O(logn)
从效果来看,成绩还是很不错的哦。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值