LeetCode 074 Search a 2D Matrix

题目说明

Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:

Integers in each row are sorted from left to right.
The first integer of each row is greater than the last integer of the previous row.

For example,

Consider the following matrix:

[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]

Given target = 3, return true.

分析

把二维数组看成一维数组,用二分查找。

代码

    public static boolean searchMatrix(int[][] matrix, int target) {

        int mx = matrix.length;
        int my = matrix[0].length;

        int l = 0;
        int r = mx * my;

        while (l < r) {

            int m = l + (r - l) / 2;

            // 将m转换成x、y
            int x = m / my;
            int y = m % my;

            // 二分查找:matrix[x][y]转换成一维数组,坐标就是m
            if (matrix[x][y] == target) {
                return true;
            } else if (matrix[x][y] < target) {
                l = m + 1;
            } else {
                r = m;
            }
        }

        return false;
    }
    原文作者:_我们的存在
    原文地址: https://blog.csdn.net/Yano_nankai/article/details/49207109
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞