LeetCode-中等-74. 搜索二维矩阵

LeetCode-中等-74. 搜索二维矩阵

题目

引用自:LeetCode-中等-74. 搜索二维矩阵(如有侵权联系删除)

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

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

示例 1:
LeetCode-中等-74. 搜索二维矩阵_第1张图片

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

示例 2:
LeetCode-中等-74. 搜索二维矩阵_第2张图片

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

提示:

  • m == matrix.length

  • n == matrix[i].length

  • 1 <= m, n <= 100

  • -104 <= matrix[i][j], target <= 104

解题:

没什么好说的,在二位矩阵中二分查找,与线性表二分查找一样,只不过在线性表判断line[mid] == target时,换成了二维矩阵中的matrix[mid / column][mid % column] == target,其他的思路一样。

代码:

//Java
class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        if(matrix.length == 0) return false;
        int column = matrix[0].length;
        int left = 0, right = matrix.length * column - 1, mid, temp;
        while (left <= right){
            mid = (left + right) / 2;
            temp = matrix[mid / column][mid % column];
            if(temp == target) {
                return true;
            }else if(temp > target) {
                right = mid - 1;
            }else {
                left = mid + 1;
            }
        }
        return false;
    }
}
#python
class Solution:
    def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
        if len(matrix) == 0:
            return False
        column = len(matrix[0])
        left = 0
        right = len(matrix) * column - 1
        while left <= right:
            mid = int((left + right) / 2)
            temp = matrix[int(mid / column)][mid % column]
            if temp == target:
                return True;
            elif temp > target:
                right = mid - 1
            else:
                left = mid + 1
        return False

Java:
LeetCode-中等-74. 搜索二维矩阵_第3张图片
Python:
LeetCode-中等-74. 搜索二维矩阵_第4张图片

总结:
这次用了Java和python俩个语言写的,可以看出来,Java运行起来还是比python快好多。

你可能感兴趣的:(leetcode练习,矩阵,leetcode,算法)