侧边栏壁纸
博主头像
GabrielxD

列車は必ず次の駅へ。では舞台は?私たちは?

  • 累计撰写 675 篇文章
  • 累计创建 128 个标签
  • 累计收到 26 条评论

目 录CONTENT

文章目录

【二分查找】搜索二维矩阵

GabrielxD
2022-05-25 / 0 评论 / 0 点赞 / 209 阅读 / 267 字
温馨提示:
本文最后更新于 2022-07-26,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

题目

74. 搜索二维矩阵


编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:

  • 每行中的整数从左到右按升序排列。
  • 每行的第一个整数大于前一行的最后一个整数。

示例 1:

image-20220525143444335

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

示例 2:

image-20220525143450973

输入: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 <= 10^4

解题

方法一:二分查找

思路

把二维数组中坐标映射为一维索引,然后使用二分查找(相等返回)。

代码

class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        int rowLen = matrix.length, colLen = matrix[0].length;
        int start = 0, end = rowLen * colLen - 1;
        while (start <= end) {
            int mid = start + ((end - start) >> 1);
            int curr = matrix[mid / colLen][mid % colLen];
            if (curr == target) return true;
            else if (curr < target) start = mid + 1;
            else end = mid - 1;
        }
        return false;
    }
}
0

评论区