力扣面试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;
    }
}
相关推荐
DTS小夏3 分钟前
算法社Python基础入门面试题库(新手版·含答案)
python·算法·面试
Mr.Ja36 分钟前
【LeetCode热题100】No.11——盛最多水的容器
算法·leetcode·贪心算法·盛水最多的容器
沐怡旸1 小时前
【底层机制】std:: function 解决的痛点?是什么?如何实现?如何正确用?
c++·面试
yinke小琪2 小时前
面试官:谈谈为什么要拆分数据库?有哪些方法?
java·后端·面试
南北是北北2 小时前
android从点击图标icon到进入首页的系统调用过程
面试
拉不动的猪3 小时前
从底层逻辑和实用性来分析ref中的值为什么不能直接引用
前端·javascript·面试
编程岁月4 小时前
java面试-0136-BIO、NIO、AIO区别?
java·面试·nio
道可到4 小时前
35 岁程序员的绝地求生计划:你准备好了吗?
前端·后端·面试
道可到5 小时前
国内最难入职的 IT 公司排行:你敢挑战哪一家?
前端·后端·面试
bot5556665 小时前
企业微信iPad协议演进:从私有二进制到可扩展接口
面试