leetcode-搜索二维矩阵

给你一个满足下述两条属性的 m x n 整数矩阵:

每行中的整数从左到右按非严格递增顺序排列。

每行的第一个整数大于前一行的最后一个整数。

给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。

示例 1:

输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3

输出:true

示例 2:

输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13

输出:false

提示:

m == matrix.length

n == matrix[i].length

1 <= m, n <= 100

-104 <= matrix[i][j], target <= 104

思路 :虽然是二维数组,但是可以看成一维数组的形式。left=0,right=m*n-1。求出mid后,找到mid对应的坐标。然后就和一维数组上的二分一样了。
代码:

c 复制代码
class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        int m = matrix.length;
        int n = matrix[0].length;

        int left = 0;
        int right = m*n-1;

        while(left<=right){
            int mid = (left+right)/2;
            int r = mid/n;
            int c = mid-r*n;
            if(matrix[r][c] == target){
                return true;
            }
            if(matrix[r][c] > target){
                right = mid-1;
            }else{
                left = mid+1;
            }
        }
        return false;
    }
}
相关推荐
nglff2 分钟前
蓝桥杯抱佛脚第二天|简单枚举,前缀和
算法·职场和发展·蓝桥杯
2301_793804693 分钟前
C++安全编程指南
开发语言·c++·算法
m0_518019485 分钟前
分布式系统安全通信
开发语言·c++·算法
AC__dream17 分钟前
2024秋招-字节跳动-算法岗笔试
数据结构·算法
SJLoveIT19 分钟前
手写transformer中自注意力机制,并解释每个矩阵及其运算的含义
深度学习·矩阵·transformer
一叶落43823 分钟前
LeetCode 151. 反转字符串中的单词(C语言)【双指针 + 字符串处理】
c语言·数据结构·算法·leetcode
_olone24 分钟前
牛客每日一题:刷题统计(Java)
java·算法·容斥原理·牛客
无敌憨憨大王25 分钟前
DFS(深搜)
算法·深度优先·图论
junnhwan25 分钟前
LeetCode Hot 100——栈
java·数据结构·算法·leetcode·hot 100
sqyno1sky28 分钟前
代码动态生成技术
开发语言·c++·算法