数据结构与算法

Leetcode 74 搜索二维矩阵

2021-12-12  本文已影响0人  itbird01

74. 搜索二维矩阵

题意:编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:
每行中的整数从左到右按升序排列。
每行的第一个整数大于前一行的最后一个整数。

解题思路

解法1:
1.分析题意,不管行还是列,数值是递增有序的,因此我们分别对于行和列,进行两次二分查找
2.首先二分查找matrix[0~m-1][0]满足条件的行的下标,如果没有查找到,则我们知道最终left指向的为第一个大于target的行的下标
3.然后再在行所在列数组matrix[len][0~n-1],二分查找是否存在目标值

解题遇到的问题

后续需要总结学习的知识点

##解法1
class Solution {
    int len = 0;
    public boolean searchMatrix(int[][] matrix, int target) {
        if (isExistLen(matrix, target)) {
            return true;
        }

        if (len < 1 || len > matrix.length) {
            return false;
        }

        return isExist(matrix, target);
    }

    public boolean isExist(int[][] a, int target) {
        int left = 0, right = a[0].length - 1;
        while (left <= right) {
            int mid = (left + right) / 2;
            if (a[len - 1][mid] == target) {
                return true;
            } else if (a[len - 1][mid] > target) {
                right = mid - 1;
            } else {
                left = mid + 1;
            }
        }
        return false;
    }

    public boolean isExistLen(int[][] a, int target) {
        int left = 0, right = a.length - 1;
        while (left <= right) {
            int mid = (left + right) / 2;
            if (a[mid][0] == target) {
                return true;
            } else if (a[mid][0] > target) {
                right = mid - 1;
            } else {
                left = mid + 1;
            }
        }
        len = left;
        return false;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读