题目描述:
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 from left to right.
- The first integer of each row is greater than the last integer of the previous row.
Example 1:
Input: matrix = [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ] target = 3 Output: true
Example 2:
Input: matrix = [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ] target = 13 Output: false
中文理解:
给定一个二维数组,元素满足从左到右递增,从上到下递增的规律,同时上一行的最后一个元素值小于下一行第一个元素值,给定一个target,判断这个数字是否是这个数组的一个元素。
解题思路:
从数组右上角开始遍历,如果数组元素大于target,则向左遍历,如果数组元素小于target,则向下遍历,如果相等,返回true。
代码(java):
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
if(matrix.length==0)return false;
int up=0,right=matrix[0].length-1;
while(up<matrix.length && right>=0){
if(matrix[up][right]<target)up++;
else if(matrix[up][right]>target)right--;
else if(matrix[up][right]==target)return true;
}
return false;
}
}