【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);
        }
    }
}

总结

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

相关推荐
Allen Bright3 分钟前
【Java基础-26.1】Java中的方法重载与方法重写:区别与使用场景
java·开发语言
苹果酱05674 分钟前
Golang的文件解压技术研究与应用案例
java·vue.js·spring boot·mysql·课程设计
执着的小火车5 分钟前
02-18.python入门基础一基础算法
数据结构·python·算法·排序算法
梦茹^_^6 分钟前
排序算法(系列)
数据结构·python·算法·排序算法·希尔排序·基数排序·计数排序和桶排序
秀儿y7 分钟前
单机服务和微服务
java·开发语言·微服务·云原生·架构
ybq195133454318 分钟前
javaEE-多线程案例-单例模式
java·开发语言
花开盛夏^.^11 分钟前
Timsort算法
数据结构·算法·排序算法
code monkey.13 分钟前
【排序算法】—— 计数排序
c++·算法·排序算法
云青山水林15 分钟前
2024.12.21 周六
c++·算法·贪心算法
chenziang120 分钟前
leetcode hot二叉树的层序遍历
数据结构·算法