LeetCode: Search a 2D Matrix 解题报告

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.

SOLUTION 1:

采用经典的二分法模板

 1 while (left <= right) {

 2             int mid = left + (right - left) / 2;

 3             

 4          

 5             int n = matrix[row][col];

 6             

 7             if (n == target) {

 8                 ...

 9             } else if (n < target) {

10                 left = mid + 1;

11             } else {

12                 right = mid - 1;

13             }

14         }

 

 1 public class Solution {

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

 3         if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {

 4             return false;

 5         }

 6         

 7         int rows = matrix.length;

 8         int cols = matrix[0].length;

 9         

10         int num = rows * cols;

11         

12         int left = 0;

13         int right = num - 1;

14         

15         while (left <= right) {

16             int mid = left + (right - left) / 2;

17             

18             int row = mid / cols;

19             int col = mid % cols;

20             

21             int n = matrix[row][col];

22             

23             if (n == target) {

24                 return true;

25             } else if (n < target) {

26                 left = mid + 1;

27             } else {

28                 right = mid - 1;

29             }

30         }

31         

32         return false;        

33     }

34 }
View Code

GITHUB:

https://github.com/yuzhangcmu/LeetCode_algorithm/blob/master/divide2/SearchMatrix.java

你可能感兴趣的:(LeetCode)