搜索二维矩阵 II(java)

题目描述

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

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

代码思路:

用暴力算法:

java 复制代码
class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        // boolean flag = false;
        if(matrix==null ||matrix.length==0 ||target<matrix[0][0]){
            return false;
        }
        int n=matrix.length;
        int m=matrix[0].length;
       
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                if(matrix[i][j]==target){
                    return true;
                }else if(matrix[i][j]>target){
                    break;
                }
            }
        }
        return false;
    }
}

巧妙的方法:

这个把他看做一个二叉搜索树,其中右上角点是根节点,往下是右子树,往左是左子树。复杂度O(log(M*N))

java 复制代码
class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        if(matrix==null ||matrix.length==0 ||target<matrix[0][0]){
            return false;
        }
        int n=matrix.length;
        int m=matrix[0].length;
        int i = 0;
        int j = m-1;
        while(true){
            if(matrix[i][j]==target){
                return true;
            }else if(matrix[i][j]>target){
                j--;
                if(j<0){
                    return false; 
                }
            }else{
                i++;
                if(i>n-1){
                    return false;
                }
            }
        }
        
    }
}
相关推荐
雨白2 小时前
Java 线程通信基础:interrupt、wait 和 notifyAll 详解
android·java
架构师沉默6 小时前
设计多租户 SaaS 系统,如何做到数据隔离 & 资源配额?
java·后端·架构
Java中文社群7 小时前
重要:Java25正式发布(长期支持版)!
java·后端·面试
每天进步一点_JL8 小时前
JVM 类加载:双亲委派机制
java·后端
NAGNIP9 小时前
大模型框架性能优化策略:延迟、吞吐量与成本权衡
算法
用户298698530149 小时前
Java HTML 转 Word 完整指南
java·后端
渣哥9 小时前
原来公平锁和非公平锁差别这么大
java
渣哥9 小时前
99% 的人没搞懂:Semaphore 到底是干啥的?
java
J2K9 小时前
JDK都25了,你还没用过ZGC?那真得补补课了
java·jvm·后端
kfyty7259 小时前
不依赖第三方,不销毁重建,loveqq 框架如何原生实现动态线程池?
java·架构