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

发布时间:2024年01月04日

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;
    }
}
文章来源:https://blog.csdn.net/why_still_confused/article/details/135352053
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。