您的位置:首页 > 其它

Search a 2D Matrix II 解题报告

2017-04-26 11:16 369 查看

Search a 2D Matrix II

Description

Write an efficient algorithm that searches for a value in an m x n matrix, return the occurrence of it.

This matrix has the following properties:

Integers in each row are sorted from left to right.

Integers in each column are sorted from up to bottom.

No duplicate integers in each row or column.

Example

Consider the following matrix:

[
[1, 3, 5, 7],
[2, 4, 7, 8],
[3, 5, 9, 10]
]

Given target = 3, return 2.


Challenge

O(m+n) time and O(1) extra space

实现思路

对比《Search a 2D Matrix 解题报告》 ,题目区别在于每一行的最后一个不一定小于下一行的第一个。但我们仔细观察,还是能找到规律,就是第一行的最后一个,往左总是小于本身,往下总是大于本身,我们可以根据这个特点,从这个元素开始查找。

一旦target>当前元素,则往下找,而target<当前元素,则往左找,最后必定会走到最后一行或第一列,遍历到所有可能等于target值的元素。

这里有一点需要注意,如果在中途找到等于target的元素,如示例中第1行第2列的3,我们可以直接做到它的左下,即2(第二行,第一列)所在位,再继续查找。

/**
*@param matrix: A list of lists of integers
* @param: A number you want to search in the matrix
* @return: An integer indicate the occurrence of target in the given matrix
*/
public int searchMatrix(int[][] matrix, int target) {
// write your code herey
int row = matrix.length;
if(row == 0){
return 0;
}
int col = matrix[0].length;
if(col == 0){
return 0;
}
int ret = 0;
int x = 0, y = col - 1;
while(x < row && y >= 0){
if(matrix[x][y] == target){
ret ++;
y--;
}else if(matrix[x][y] > target){
y--;
}else{
x ++;
}
}
return ret;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: