【Leetcode 74】搜索二维矩阵 —— 二分查找|矩阵

简介: 给你一个满足下述两条属性的`m x n`整数矩阵:每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数

74. 搜索二维矩阵

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

  • 每行中的整数从左到右按非严格递增顺序排列。
  • 每行的第一个整数大于前一行的最后一个整数。
    给你一个整数target,如果target在矩阵中,返回true;否则,返回false

示例 1:

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

题目分析

矩阵

算法思路:

  1. 依次将每行最后一个数与 target 对比,若matrix[row][n] < target则对比下一行末的元素
  2. 遍历 target 所在行,进行数字匹配
class Solution {
   
   
    public boolean searchMatrix(int[][] matrix, int target) {
   
   
        int row = 0, n = matrix[0].length - 1, m = matrix.length;
        while(row < m && matrix[row][n] < target){
   
   
            row++;
        }
        if(row >= m){
   
   
            return false;
        }
        // 遍历
        for(int num : matrix[row]){
   
   
            if(num == target){
   
   
                return true;
            }
        }
        return false;
    }
}

二分查找

算法思路:

  1. 把矩阵视为元素个数为m * n - 1的升序一维数组进行二分查找

二分查找算法是用分治策略实现对n个元素进行排序的算法。详细可见 分治法的基本思想与例子解析

class Solution {
   
   
    public boolean searchMatrix(int[][] matrix, int target) {
   
   
        int m = matrix.length, n = matrix[0].length;
        int low = 0, high = m * n - 1;
        while (low <= high) {
   
   
            int mid = (high - low) / 2 + low;
            int x = matrix[mid / n][mid % n];
            if (x < target) {
   
   
                low = mid + 1;
            } else if (x > target) {
   
   
                high = mid - 1;
            } else {
   
   
                return true;
            }
        }
        return false;
    }
}
相关文章
|
17天前
|
算法
力扣经典150题第三十七题:矩阵置零
力扣经典150题第三十七题:矩阵置零
13 2
|
1月前
|
索引
【LeetCode刷题】二分查找:山脉数组的峰顶索引、寻找峰值
【LeetCode刷题】二分查找:山脉数组的峰顶索引、寻找峰值
|
1月前
【LeetCode刷题】专题三:二分查找模板
【LeetCode刷题】专题三:二分查找模板
【LeetCode刷题】专题三:二分查找模板
|
17天前
力扣随机一题 6/28 数组/矩阵
力扣随机一题 6/28 数组/矩阵
14 0
|
17天前
力扣每日一题 6/11 暴力搜索
力扣每日一题 6/11 暴力搜索
8 0
|
1月前
【LeetCode刷题】二分查找:寻找旋转排序数组中的最小值、点名
【LeetCode刷题】二分查找:寻找旋转排序数组中的最小值、点名
|
1月前
|
算法
【经典LeetCode算法题目专栏分类】【第6期】二分查找系列:x的平方根、有效完全平方数、搜索二位矩阵、寻找旋转排序数组最小值
【经典LeetCode算法题目专栏分类】【第6期】二分查找系列:x的平方根、有效完全平方数、搜索二位矩阵、寻找旋转排序数组最小值
|
1月前
|
算法
【经典LeetCode算法题目专栏分类】【第4期】BFS广度优先算法:单词接龙、最小基因变化、二进制矩阵中的最短路径
【经典LeetCode算法题目专栏分类】【第4期】BFS广度优先算法:单词接龙、最小基因变化、二进制矩阵中的最短路径
|
1月前
|
算法
【经典LeetCode算法题目专栏分类】【第3期】回溯问题系列:单词搜索、N皇后问题、判断有效数独、解数独
【经典LeetCode算法题目专栏分类】【第3期】回溯问题系列:单词搜索、N皇后问题、判断有效数独、解数独
|
1月前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-2
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题