Write an efficient algorithm that searches for a value in an `m x n` matrix. The matrix has these properties: each row is sorted in ascending order, and the first integer of each row is greater than the last integer of the previous row. Return true if the value exists. (Classic binary search on rows and columns.)
2D list and integer target.
Boolean.
Example 1:
Input:
matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]] target = 3
Output:
true
Example 2:
Input:
matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]] target = 13
Output:
false
Example 3:
Input:
matrix = [[1]] target = 1
Output:
true