LeetCode 240. 搜索二维矩阵 II

这篇博客讨论了一种在二维矩阵中搜索目标值的算法。通过利用矩阵的特性,从右上角开始,按特定顺序遍历,当结果大于目标值时向左移动,小于目标值时向下移动,从而实现高效的查找。递归函数getTarget实现了这一逻辑,通过不断调整行和列的范围来缩小搜索空间。此外,还提到了易错点和优化解法,帮助理解算法的工作原理。
摘要由CSDN通过智能技术生成

1、数据结构

2、递归:注意到,当矩阵某一行 j 满足 line[i-1]<target, line[i]>target,那么 line[i] 的右下角的所有数字均大于 target,line[i] 的左上角的所有数字均小于 target。即遍历数组,找到满足上述描述的位置,递归遍历该点的左下角。

易错点注意:递归时传递的参数为行和列,根据我的代码逻辑,应该是起始的行和结束的列。

优化解法:观察矩阵发现两个特征点左下角以及右上角,左下角的点往上减小,往右增加;右上角的点,往下增加,往左减小。所以从右上角开始遍历,当结果大于值时向左遍历,当结果小于值时向下遍历,根据此顺序遍历得到目标值。

Go

func searchMatrix(matrix [][]int, target int) bool {
    var m, n int=len(matrix), len(matrix[0])
    var getTarget func(row, col int) bool
    getTarget=func(row, col int) bool{
        if row<m && col>=0{
            for i:=row; i<m; i++{
                for j:=0; j<=col; j++{
                    if matrix[i][j]==target{
                        return true
                    }else if matrix[i][j]>target && j>0 && matrix[i][j-1]<target{
                        return getTarget(i+1, j-1)
                    }
                }
            }
        }
        return false
    }
    return getTarget(0, n-1)
}

Java

class Solution {
    public int[][] matrix;
    public int target;
    public boolean searchMatrix(int[][] matrix, int target) {
        this.matrix=matrix;
        this.target=target;
        return getTarget(0, matrix[0].length-1);
    }
    public boolean getTarget(int row, int col){ 
        if(row<matrix.length && col>=0){
            for(int i=row; i<matrix.length; i++){
                for(int j=0;j<=col;j++){
                    if(matrix[i][j]==target){
                        return true;
                    }else if(matrix[i][j]>target && j>0 && matrix[i][j-1]<target){
                        return getTarget(i+1, j-1);
                    }
                }
            }
        }
        return false;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值