Saturday, September 23, 2017

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.

Solution:
Search from up right corner, if target> corner => the entire row can be ignored because they are all smaller than the corner value. If target < corner => the entire column can be ignored because they are all greater than the corner value. 
The time complexity will be O(m+n). The worst case is we ignore all the rows and columns and the iteration runs m+n times.
 public boolean searchMatrix(int[][] matrix, int target) {  
     if(matrix==null || matrix.length==0 || matrix[0].length==0) return false;  
     int row=0;  
     int col=matrix[0].length-1;  
     while(row<matrix.length && col>=0){  
       if(target==matrix[row][col]) return true;  
       else if(target<matrix[row][col]) col--;  
       else row++;  
     }  
     return false;  
   }  

No comments:

Post a Comment