力扣面试150题--搜索二维矩阵

Day 82

题目描述

思路

此题其实就是二分搜索的变形,

首先将确定要查询的数位于哪一行,由于二维数组是有序的,就比较每行的第一个元素和最后一个元素,这里直接相等就返回。

最后,锁定到某一行后,就采取二分查找,找到就返回true 没找到就到终止条件,跳出循环返回false。

java 复制代码
class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        //先确定在哪一个行
        int row=0;
        if(matrix[0].length==1){
            while(row<matrix.length){
                if(target==matrix[row][0]){
                return true;
            }
            row++;
        }
            return false;
        }
        while(true){
            if(target>=matrix[row][0]&&target<=matrix[row][matrix[row].length-1]){
                break;
            }
            row++;
            if(row>=matrix.length){
                return false;
            }
        }
        int beg=0;
        int end=matrix[row].length-1;
        int mid;
        while(beg<end){
            if(target==matrix[row][beg]||target==matrix[row][end]){
                return true;
            }
            mid=(beg+end)/2;
            if(target==matrix[row][mid]){
                return true;
            }
            else if(target<matrix[row][mid]){
                beg=beg;
                end=mid-1;
            }
            else{
                beg=mid+1;
                end=end;
            }
        }
        return false;
    }
}
相关推荐
掘金012 小时前
初学者 WebRTC 视频连接教程:脚本逻辑深度解析
javascript·面试
wait a minutes4 小时前
【c++】200*200 01灰度矩阵求所有的连通区域坐标集合
c++·矩阵·深度优先
冷月葬花~5 小时前
day27 力扣332.重新安排行程 力扣51. N皇后 力扣37. 解数独 力扣455.分发饼干 力扣376. 摆动序列 力扣53. 最大子序和
服务器·前端·leetcode
天天摸鱼的java工程师5 小时前
面试官说:“设计一个消息中间件你会怎么做?”我当场就不困了 ☕️🚀
java·后端·面试
我想吃烤肉肉6 小时前
leetcode-sql-627变更性别
数据库·sql·leetcode
独立开阀者_FwtCoder6 小时前
Vue 抛弃虚拟 DOM,底层到底换成啥了?怎么更新 DOM?
前端·面试·github
熬了夜的程序员6 小时前
【华为机试】240. 搜索二维矩阵 II
线性代数·算法·华为·面试·矩阵·golang·深度优先
美丽新科技6 小时前
【计算机考研(408)- 数据结构】数组和特殊矩阵
数据结构·考研·矩阵
点云SLAM6 小时前
海森矩阵(Hessian Matrix)在SLAM图优化和点云配准中的应用介绍
算法·机器学习·矩阵·机器人·概率论·最小二乘法·数值优化