Search a 2D Matrix II

来源:互联网 发布:程序员开发工具网 编辑:程序博客网 时间:2024/06/07 02:34

1.题目

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.

2.算法

这道题和 Search a 2D Matrix I不同, Search a 2D Matrix I中要求下一行的开始大于上一行的结束,而这个并没有要求。用二分查找不能满足要求。我们可以看到右上角的数15,从他开始向下是递增的,向左是递减的,所以我们从他开始和目标数比较。

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


0 0