【LeetCode】240.搜索二维矩阵Ⅱ

题目

编写一个高效的算法来搜索 m xn 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:

  • 每行的元素从左到右升序排列。
  • 每列的元素从上到下升序排列。

示例 1:

复制代码
输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5
输出:true

示例 2:

复制代码
输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 20
输出:false

提示:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= n, m <= 300
  • -10^9 <= matrix[i][j] <= 10^9
  • 每行的所有元素从左到右升序排列
  • 每列的所有元素从上到下升序排列
  • -10^9 <= target <= 10^9

解答

源代码

java 复制代码
class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        return dfs(matrix, 0, matrix[0].length - 1, target);
    }

    public boolean dfs(int[][] matrix, int i, int j, int target) {
        if (i >= matrix.length || j < 0) {
            return false;
        }

        if (matrix[i][j] == target) {
            return true;
        } else if (matrix[i][j] > target) {
            return dfs(matrix, i, j - 1, target);
        } else {
            return dfs(matrix, i + 1, j, target);
        }
    }
}

总结

想用递归,但重点在于递归的起点在哪里。一开始我把递归的起点定在了左上角,这样做出来的算法其实比暴力破解还糟糕;把起点定在右上角才是正确的选择,此时当前元素的左边都比它小,下边都比它大。

相关推荐
青云交几秒前
Java 大视界 -- Java 大数据在智能医疗远程手术机器人操作数据记录与分析中的应用(342)
java·大数据·数据记录·远程手术机器人·基层医疗·跨院协作·弱网络适配
呆呆的小鳄鱼6 分钟前
leetcode:322. 零钱兑换[完全背包]
算法·leetcode·职场和发展
知北游天7 分钟前
Linux:多线程---同步&&生产者消费者模型
java·linux·网络
Gyoku Mint16 分钟前
深度学习×第7卷:参数初始化与网络搭建——她第一次挑好初始的重量
人工智能·pytorch·rnn·深度学习·神经网络·算法·机器学习
钢铁男儿17 分钟前
C#接口实现详解:从理论到实践,掌握面向对象编程的核心技巧
java·前端·c#
深栈解码20 分钟前
第二章:Class文件解剖:字节码的二进制密码
java·后端
mit6.82427 分钟前
[Vroom] 位置与矩阵 | 路由集成 | 抽象,解耦与通信
c++·人工智能·算法
TeamDev29 分钟前
从 JavaFX WebView 迁移至 JxBrowser
java·后端·webview
麦兜*29 分钟前
【SpringBoot 】Spring Boot OAuth2 六大安全隐患深度分析报告,包含渗透测试复现、漏洞原理、风险等级及完整修复方案
java·jvm·spring boot·后端·spring·系统架构