Leetcode Search a 2D Matrix

本文介绍了一种高效的矩阵搜索算法,用于在一维有序数组或二维有序矩阵中查找特定元素。该算法利用了二分搜索原理,提供了两种实现思路:一种是分别在行和列上进行二分搜索;另一种则是将矩阵转化为一维数组进行二分搜索。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意:给定一个元素按序排列的矩阵,判断某个元素是否在其中。

思路:两次二分搜索,先搜索列,再搜索行。

class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        if(matrix.size() == 0) return false;
        if(target < matrix[0][0]) return false;
        if(target == matrix[0][0]) return true;
        int low = 0;
        int high = matrix.size() - 1;
        if(matrix[low][0] == target || matrix[high][0] == target) return true;
        while(high - low > 1) {
            if(matrix[low][0] == target || matrix[high][0] == target) return true;
            int mid = low + (high -low) / 2;
            if(matrix[mid][0] == target ) return true;
            if(target < matrix[mid][0]) {
                high = mid;
            }
            else {
                low = mid;
            }
        }
        int r = low;
        if(matrix[high][0] < target) r = high;
        
        low = 0;
        high = matrix[r].size() - 1;
        while(low != high) {
            if(matrix[r][low] == target || matrix[r][high] == target) return true;
            int mid = low + (high - low) / 2;
            if(matrix[r][mid] == target) return true;
            if(matrix[r][mid] < target) {
                low = mid + 1;
            }
            else {
                high = mid;
            }
        }
        if(matrix[r][low] == target) return true;
        
        return false;
    }
};

另一种思路是把他当作一维二分查找做。

n * m matrix convert to an array => matrix[x][y] => a[x * m + y]

an array convert to n * m matrix => a[x] =>matrix[x / m][x % m];


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值