zoukankan      html  css  js  c++  java
  • [LeetCode] 240. Search a 2D Matrix Ⅱ(矩阵搜索之二)

    Description

    Write an efficient algorithm that searches for a target value in an m x n integer matrix. The matrix has the following properties:
    设计一个高效算法,判断一个给定值 target 是否存在于给定的 m x n 整数矩阵 matrix 中。matrix 具有以下属性:

    • Integers in each row are sorted in ascending from left to right.
      每一行上的整数从左到右升序排序。
    • Integers in each column are sorted in ascending from top to bottom.
      每一列上的整数从上到下升序排序。

    Examples

    Example 1

    Input: 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
    Output: true
    

    Example 2

    Input: 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 = 20
    Output: false
    

    Constraints

    • m == matrix.length
    • n == matrix[i].length
    • 1 <= n, m <= 300
    • -1e9 <= matix[i][j] <= 1e9
    • All the integers in each row are sorted in ascending order.
    • All the integers in each column are sorted in ascending order.
    • -1e9 <= target <= 1e9

    Solution

    这题的关键点在于初始点的选取,一开始我傻乎乎地把起始点放在正中心,结果发现怎么搜也搜不了。discussion 里给出的一个解法是以左上角作为起始点:

    • 若目标值比当前值大,说明目标值不在当前值所在的这一行

    • 若目标值比当前值小,说明目标值不在当前值所在的这一列

    代码如下:

    class Solution {
        fun searchMatrix(matrix: Array<IntArray>, target: Int): Boolean {
            if (matrix.isEmpty() || matrix[0].isEmpty()) {
                return false
            }
            var row = 0
            var col = matrix[0].lastIndex
            
            while (row < matrix.size && col >= 0) {
                val curValue = matrix[row][col]
                if (target == curValue) {
                    return true
                } else if (target > curValue) {
                    row++
                } else {
                    col--
                }
            }
            return false
        }
    }
    
  • 相关阅读:
    [LeetCode]Interleaving String关于遍历和动态规划
    [LeetCode]Power
    [LeetCode]Two Sum
    [LeetCode]wildcard matching通配符实现之贪心法
    [LeetCode]wildcard matching通配符实现之动态规划
    [LeetCode]wildcard matching通配符实现之递归
    回文分割
    iOS开发之应用内检测手机锁屏,解锁状态
    iOS 拨打电话
    iOS 中文转拼音
  • 原文地址:https://www.cnblogs.com/zhongju/p/14055429.html
Copyright © 2011-2022 走看看