zoukankan      html  css  js  c++  java
  • [LeetCode] 74. 搜索二维矩阵

    题目链接 : https://leetcode-cn.com/problems/search-a-2d-matrix/

    题目描述:

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

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

    示例:

    示例 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
    

    思路:

    一句话解释: 二维数组转一维,用二分法

    详细解释,

    二维变成一维,就是按照二维数组顺序,依次变成一维数列,所以有如果一个数在一维坐标位置是loc,那么它在二维坐标就是[loc/col][loc%col]

    时间复杂度: (O(log(mn)) = O(log(m) + log(n)))

    代码:

    class Solution:
        def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
            if not matrix: return False
            row = len(matrix)
            col = len(matrix[0])
            left = 0
            right = row * col
            while left < right:
                mid = left + (right - left) // 2
                if matrix[mid // col][mid % col] < target:
                    left = mid + 1
                else:
                    right = mid
            #print(left,right)
            return left < row * col and matrix[left // col][left % col] == target
    

    java

    class Solution {
        public boolean searchMatrix(int[][] matrix, int target) {
            if (matrix == null || matrix.length == 0) return false;
            int row = matrix.length;
            int col = matrix[0].length;
            int left = 0;
            int right = row * col;
            while (left < right) {
                int mid = left + (right - left) / 2;
                if (matrix[mid / col][mid % col] < target) left = mid + 1;
                else right = mid;
            }
            return (left < row * col && matrix[left / col][left % col] == target); 
        }
    }
    
  • 相关阅读:
    WWDC2014苹果的“软件”发布会
    那些好用的iOS开发工具
    40个国人iOS技术博客
    深度解析开发项目之 05
    深度解析开发项目之 04
    深度解析开发项目之 03
    深度解析开发项目之 02
    成长为 iOS 大 V 的秘密
    理解 iOS 的内存管理
    峰回路转的提权08r2服务器
  • 原文地址:https://www.cnblogs.com/powercai/p/10950399.html
Copyright © 2011-2022 走看看