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
做法:
从每一行的最后一个开始比较,如果比target大,则去掉这一列。如果比target小,则去掉这一行。
public class Solution { /** * @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 here if(matrix==null || matrix.length==0 || matrix[0].length==0) return 0; int count=0; int m=matrix.length; int n=matrix[0].length; int row=0; int col=n-1; while(row<m && col>=0) { if(matrix[row][col]>target) { col--; } else if(matrix[row][col]<target) { row++; } else { count++; row++; col--; } } return count; } }
时间: 2024-10-13 12:31:06