LeetCode240:Search a 2D Matrix II
发布日期:2025-04-05 03:27:23 浏览次数:10 分类:精选文章

本文共 954 字,大约阅读时间需要 3 分钟。

为了高效地在具有行和列排序规则的矩阵中搜索目标值,我们可以采用一种类似二分查找的扩展算法。该算法在O(m + n)的时间复杂度下完成任务,利用矩阵的特定结构来减少搜索范围。

方法思路

  • 问题分析:矩阵中的每一行和每一列都按升序排列,这意味着我们可以利用这一特性来缩小搜索范围。

  • 算法选择:使用类似于二分查找的扩展方法,从右上角开始,沿对角线移动。如果当前元素小于目标值,向右移动(减少列索引);如果大于目标值,向下移动(增加行索引)。

  • 复杂度分析:该算法的时间复杂度为O(m + n),其中m是矩阵的行数,n是列数。由于每次循环至少减少一个索引,总的操作次数最多为m + n次。

  • 解决代码

    public class Solution {    public boolean searchMatrix(int[][] matrix, int target) {        int m = matrix.length;        if (m == 0) return false;        int n = matrix[0].length;        int i = 0, j = n - 1;        while (i < m && j >= 0) {            if (matrix[i][j] == target) {                return true;            } else if (matrix[i][j] > target) {                j--;            } else {                i++;            }        }        return false;    }}

    代码解释

  • 初始化变量:获取矩阵的行数m和列数n。初始化行索引i=0,列索引j=n-1。

  • 循环条件:只要i小于m且j大于等于0,继续循环。

  • 检查当前元素

    • 如果当前元素等于目标值,返回true。
    • 如果当前元素大于目标值,减少列索引j。
    • 否则,增加行索引i。
  • 结束条件:当循环结束时,若未找到目标值,返回false。

  • 这种方法充分利用了矩阵的结构特性,确保在最优时间复杂度内完成搜索任务。

    上一篇:LeetCode268.缺失数字
    下一篇:leetcode238-除自身以外数组的乘积

    发表评论

    最新留言

    留言是一种美德,欢迎回访!
    [***.207.175.100]2025年05月05日 07时56分24秒