240. Search a 2D Matrix II

来源:互联网 发布:js atan2函数 编辑:程序博客网 时间:2024/06/05 15:58

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.


题解:

这一类m*n矩阵可以横着看做是m个有序链表,竖着是n个有序链表。从右上角开始搜索,相当于用横着的每个链表的最大数同时也是竖着的链表的最小数与target比较,假如target大于这个数,说明它大于当前这一行的链表的最大数,于是row++,往下检索下一行。假如target小于这个数,说明它小于当前这一列链表的最小数,于是col--,往左检索下一列。


代码:

时间复杂度为O(m+n).
public class Solution {    public boolean searchMatrix(int[][] matrix, int target) {        if(matrix == null || matrix.length == 0) {            return false;        }       int n = matrix.length;       int m = matrix[0].length;       int row = 0;       int col = m-1;       while(col >= 0 && row < n) {           if(matrix[row][col] == target) {               return true;           } else if(matrix[row][col] > target) {               col--;           } else {               row++;           }       }       return false;    }}


0 0
原创粉丝点击