力扣hot100:搜索二维矩阵

题目描述:

题目分析:

本题的本质是一个查找算法,为了提高性能可以使用二分查找,这个二维矩阵可以看出许多个数组,只需要对每个数组都进行一次二分查找就可以实现查找整个二维矩阵。(二分查找的解析可以看之前https://mp.csdn.net/mp_blog/creation/editor/155892434

代码如下:

java 复制代码
class Solution {
    private int erfen(int[] nums,int target){
        int right=nums.length-1;
        int left=0;
        while(left<=right){
            int mid=(right-left)/2+left;
            if(target>nums[mid]){
                left=mid+1;
            }else{
                right=mid-1;
            }
        }
        return left;
    }
    public boolean searchMatrix(int[][] matrix, int target) {
        int n=matrix.length;
        for(int i=0;i<n;i++){
            int weizi=erfen(matrix[i],target);
            if(weizi<matrix[i].length&&matrix[i][weizi]==target){
                return true;
            }
        }
        return false;
    }
}

要点解析:

二分查找返回的是目标值最先出现的位置或者是在有序数组中的插入位置,如果是在有序数组中的插入位置则可能为在数组最后一个位置加一个数,这是如果进行matrix[i][weizi]==target的判断的话会导致数组越界,必须先处理越界问题,最终判断条件应为weizi<matrix[i].length&&matrix[i][weizi]==target。

相关推荐
种时光的人8 小时前
CANN仓库核心解读:catlass夯实AIGC大模型矩阵计算的算力基石
线性代数·矩阵·aigc
那个村的李富贵8 小时前
CANN加速下的AIGC“即时翻译”:AI语音克隆与实时变声实战
人工智能·算法·aigc·cann
power 雀儿8 小时前
Scaled Dot-Product Attention 分数计算 C++
算法
琹箐8 小时前
最大堆和最小堆 实现思路
java·开发语言·算法
renhongxia19 小时前
如何基于知识图谱进行故障原因、事故原因推理,需要用到哪些算法
人工智能·深度学习·算法·机器学习·自然语言处理·transformer·知识图谱
坚持就完事了9 小时前
数据结构之树(Java实现)
java·算法
算法备案代理9 小时前
大模型备案与算法备案,企业该如何选择?
人工智能·算法·大模型·算法备案
赛姐在努力.9 小时前
【拓扑排序】-- 算法原理讲解,及实现拓扑排序,附赠热门例题
java·算法·图论
野犬寒鸦10 小时前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法
霖霖总总11 小时前
[小技巧66]当自增主键耗尽:MySQL 主键溢出问题深度解析与雪花算法替代方案
mysql·算法