欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > leetcode hot100【LeetCode 74.搜索二维矩阵】java实现

leetcode hot100【LeetCode 74.搜索二维矩阵】java实现

2025/3/14 21:04:34 来源:https://blog.csdn.net/qq_14815605/article/details/143878507  浏览:    关键词:leetcode hot100【LeetCode 74.搜索二维矩阵】java实现

LeetCode 74.搜索二维矩阵

题目描述

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

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

示例 1:

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

示例 2:

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

Java 实现代码

class Solution {public boolean searchMatrix(int[][] matrix, int target) {int m = matrix.length;int n = matrix[0].length;int left = 0, right = m * n - 1;while (left <= right) {int mid = left + (right - left) / 2;int midValue = matrix[mid / n][mid % n];if (midValue == target) {return true;} else if (midValue < target) {left = mid + 1;} else {right = mid - 1;}}return false;}
}

解题思路

  1. 二维矩阵当作一维数组

    • 将二维矩阵看作一个长度为 m * n 的一维数组。
    • 矩阵中索引 (row, col) 可以通过一维索引 mid 计算得到:
      • 行号:row = mid / n
      • 列号:col = mid % n
  2. 二分查找

    • 使用二分查找法,初始化 left = 0right = m * n - 1
    • 计算中间索引 mid,根据其映射的矩阵元素 matrix[mid / n][mid % n] 进行比较。
    • 如果 matrix[mid / n][mid % n] == target,返回 true
    • 如果小于 target,则移动左指针。
    • 如果大于 target,则移动右指针。

复杂度分析

  • 时间复杂度:O(log(m * n)) 二分查找在 m * n 个元素中查找目标值,因此时间复杂度为 O(log(m * n))。
  • 空间复杂度:O(1)。我们只使用了常量级别的额外空间来存储索引。

执行过程示例

matrix = [[1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 60]]target = 11 为例:

  1. 初始化:m = 3, n = 4left = 0, right = 11
  2. 第一次迭代:
    • 计算 mid = 5 ((0 + 11) / 2)
    • midValue = matrix[5 / 4][5 % 4] = matrix[1][1] = 11
    • midValue == target,返回 true

target = 13 为例:

  1. 初始化:m = 3, n = 4left = 0, right = 11
  2. 第一次迭代:
    • 计算 mid = 5 ((0 + 11) / 2)
    • midValue = matrix[5 / 4][5 % 4] = matrix[1][1] = 11
    • midValue < target,移动左指针:left = 6
  3. 第二次迭代:
    • 计算 mid = 8 ((6 + 11) / 2)
    • midValue = matrix[8 / 4][8 % 4] = matrix[2][0] = 23
    • midValue > target,移动右指针:right = 7
  4. 第三次迭代:
    • 计算 mid = 6 ((6 + 7) / 2)
    • midValue = matrix[6 / 4][6 % 4] = matrix[1][2] = 16
    • midValue > target,移动右指针:right = 5
  5. 退出循环,返回 false

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com