zoukankan      html  css  js  c++  java
  • 【LeetCode】240-搜索二维矩阵 II

    题目描述

    编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:

    • 每行的元素从左到右升序排列。
    • 每列的元素从上到下升序排列。

    示例:

    现有矩阵 matrix 如下:

    [
      [1,   4,  7, 11, 15],
      [2,   5,  8, 12, 19],
      [3,   6,  9, 16, 22],
      [10, 13, 14, 17, 24],
      [18, 21, 23, 26, 30]
    ]
    

    给定 target = 5,返回 true

    给定 target = 20,返回 false


    解题思路

    设置起始点为右上角的元素,总体的遍历方向是向左下,每次遍历,将target和当前元素matrix[row][col]进行比较。

    • 如果target大于当前元素,则说明target的坐标肯定在当前元素的下面,而不可能在左边
    • 如果target小于当前元素,则说明target的坐标肯定在当前元素的左边,而不可能在下面
    • 遍历完整个二维数组都没有找到匹配的target,则返回false

    Java 实现

    public boolean searchMatrix (int[][] matrix, int target) {
        if (matrix == null || matrix.length < 1 || matrix[0].length < 1) {
            return false;
        }
        int row = 0;
        int col = matrix[0].length - 1;
        while (row <= matrix.length - 1 && col >= 0) {
            if (target == matrix[row][col]) {
                return true;
            } else if (target > matrix[row][col]) {
                row++;
            } else if (target < matrix[row][col]) {
                col--;
            }
        }
        return false;
    }
    

    心得体会

    最开始想利用左上到右下的对角线进行二分查找,思路局限于二分查找,但实际上用线性时间实现起来更简便。

  • 相关阅读:
    标题栏外区域拖动窗体
    搜索引擎技术核心揭密
    用C#实现木马程序(转载)
    DotNet里的控件数组
    RECORDNUMBER应用之控制每页显示行数及隔行换色
    搜索引擎技术学习
    VB里面操作Excel(居然比C#强)
    第三代搜索引擎技术与P2P
    C# 用API播放声音
    如何判断ExecuteScalar()得到的结果是否有记录
  • 原文地址:https://www.cnblogs.com/yuzhenzero/p/10620136.html
Copyright © 2011-2022 走看看