力扣 74. 搜索二维矩阵

🔗 https://leetcode.cn/problems/search-a-2d-matrix

题目

  • 给一个二维矩阵,保证数字在每行从左到右都是非严格递增
  • 每一行的第一个数字大于上一行最后一个数字
  • 给一个 target,判断是否存在在二维矩阵中

思路

  • 先 binary search 定位到行,再 binary search 定位到列

代码

cpp 复制代码
class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        int m = matrix.size();
        int n = matrix[0].size();
        int x, y, xx, yy;
        x = 0; y = 0; 
        xx = m - 1; yy = n - 1;
        int mid_x = (x + xx) / 2;
        while (x <= xx) {
            mid_x = (x + xx) / 2;
            if (matrix[mid_x][n - 1] < target) {
                x = mid_x + 1;
            }
            if (matrix[mid_x][0] > target) {
                xx = mid_x - 1;
            }

            if (matrix[mid_x][0] <= target && matrix[mid_x][n - 1] >= target)
                break;
        }

        if (matrix[mid_x][0] > target || matrix[mid_x][n - 1] < target) 
            return false;

        int mid_y = (y + yy) / 2;
        while (y <= yy) {
                int mid_y = (y + yy) / 2;
                if (matrix[mid_x][mid_y] == target) return true;
                if (matrix[mid_x][mid_y] < target) {
                    y = mid_y + 1;
                } else {
                    yy = mid_y - 1;
                }  
        }
        return false;
    }
};
相关推荐
想跑步的小弱鸡5 小时前
Leetcode hot 100(day 3)
算法·leetcode·职场和发展
xyliiiiiL6 小时前
ZGC初步了解
java·jvm·算法
爱的叹息7 小时前
RedisTemplate 的 6 个可配置序列化器属性对比
算法·哈希算法
独好紫罗兰7 小时前
洛谷题单2-P5713 【深基3.例5】洛谷团队系统-python-流程图重构
开发语言·python·算法
每次的天空8 小时前
Android学习总结之算法篇四(字符串)
android·学习·算法
请来次降维打击!!!8 小时前
优选算法系列(5.位运算)
java·前端·c++·算法
qystca8 小时前
蓝桥云客 刷题统计
算法·模拟
别NULL9 小时前
机试题——统计最少媒体包发送源个数
c++·算法·媒体
weisian1519 小时前
Java常用工具算法-3--加密算法2--非对称加密算法(RSA常用,ECC,DSA)
java·开发语言·算法
程序员黄同学10 小时前
贪心算法,其优缺点是什么?
算法·贪心算法