Search a 2D Matrix

来源:互联网 发布:用友t6软件多少钱 编辑:程序博客网 时间:2024/05/16 15:15

74. 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 boolean searchMatrix(int[][] matrix, int target) {        if (matrix == null || matrix.length == 0 || matrix[0].length == 0) return false;        int row = matrix.length, col = matrix[0].length;    int begin = 0, end = row * col - 1;        while(begin <= end){    int mid = begin + (end - begin) / 2;    int val = matrix[mid / col][mid % col];    if(val == target) return true;    else if(val < target) begin = mid + 1;    else end = mid - 1;    }    return false;

240. Search a 2D Matrix II

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 in ascending from left to right.
  • Integers in each column are sorted in ascending from top to bottom.

For example,

Consider the following matrix:

[  [1,   4,  7, 11, 15],  [2,   5,  8, 12, 19],  [3,   6,  9, 16, 22],  [10, 13, 14, 17, 24],  [18, 21, 23, 26, 30]]

Given target = 5, return true.

Given target = 20, return false.

public boolean searchMatrix(int[][] matrix, int target) {        if (matrix == null || matrix.length == 0 || matrix[0].length == 0) return false;        int i = 0; // row        int j = matrix[0].length - 1; // col        while (j >= 0 && i <= matrix.length - 1) {            int value = matrix[i][j];            if (value == target) return true;            else if (target < value) {                j--;                }             else if (target > value) {                i++;                }                    }        return false;    }




原创粉丝点击