LeetCode-74. 搜索二维矩阵

题目来源

74. 搜索二维矩阵

题目详情

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

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

示例 1:

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

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

题解分析

解法一:二分法

  1. 根据本题的题意,我们可以观察到,当前行的第一个值是始终小于上一行的最后一个元素,因此,我们可以将所有的行拼接起来形成一个有序的一维数组。
  2. 因为拼接后的数组是升序的,所以我们可以使用二分法来查找target值。只不过,我们在获取mid所在的元素时,需要根据mid值求出行号和列号。
class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        int n = matrix.length;
        int m = matrix[0].length;
        int low = 0, high = n * m -1;
        while(low <= high){
            int mid = low + (high - low) / 2;
            int midval =  matrix[mid / m][mid % m];
            if(target == midval){
                return true;
            }else if(target < midval){
                high = mid - 1;
            }else{
                low = mid + 1;
            }
        }
        return false;
    }
}
posted @ 2022-03-06 11:35  Garrett_Wale  阅读(40)  评论(0编辑  收藏  举报