题目
https://leetcode.com/problems/search-a-2d-matrix/
题意解析
在二维数组中找一个数,这个二维数组满足2个特性
- 同一行中的数字右边的比左边的大。
- 下一行的第一个数比上一行的最后一个数大。
求解
应该找到这样的一个点,使得这样一个点和target数比较的时候如果小于只能是在其左边找,大于则只能在其下方找,想找这样的理由是根据二维数组的特性得到的。
如果是从第一个点开始找现在不能满足情况 ,应该要找的target可能在右边或者下方,同理最后一个数字也不行,继续探讨,根据二维数组的第二个特性,选择从第一行的最后一个数字开始比较,刚好能做到想要的效果。
从第一行的最后一个数字和target比:
如果相等:返回true;
如果大于:在数的左边;
如果小于:在树的下方;
直到最后还没找到target则返回false;
Code
Ac代码
/**
* Created by loveqh on 2016/8/12.
*/
public class SearchA2DMatrix {
public boolean searchMatrix(int[][] matrix, int target) {
int m = matrix.length;
int n = matrix[0].length ;
int i = 0;
int j = n - 1;
while (i < m && j >= 0) {
if (matrix[i][j] == target) {
return true;
} else if (matrix[i][j] > target) {
j--;
} else {
i++;
}
}
return false;
}
public static void main(String[] args) {
int[][] matrix={{1,3}};
new SearchA2DMatrix().searchMatrix(matrix,1);
}
}