LeetCode -- Search a 2D Matrix II
Description:
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.
This question seems to be about the expansion of Search a 2D Matrix. In fact, it is totally different from the first question. The streamlined approach is:
1. Start from the bottom left. If matrix [r, c] (r is a row and c is a column) <target, c ++; otherwise, r --.
2. Until r or c crosses the border.
Implementation Code:
public class Solution { public bool SearchMatrix(int[,] matrix, int target) { var rowLen = matrix.GetLength(0); var colLen = matrix.GetLength(1); var row = rowLen - 1; var col = 0; while(col <= colLen - 1 && row >= 0){ if(matrix[row,col] == target){ return true; } else if(matrix[row,col] < target){ col ++; } else{ row --; } } return false; }}