题目给的是n*m的数组,测试用例里面居然有一个[ ]…所以在最开始就加了判断语句;
顺便复习了一下二维数组的用法:
type a[ ][ ];
a.length为a的行数;
a[0].length为第1行的列数;
class Solution {
//整个二维矩阵从右上角看是一个类似二叉查找树的结构,左节点小于父节点
//右节点大于父节点,故从最右上角的点开始往下查找即可。
public boolean findNumberIn2DArray(int[][] matrix, int target) {
if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
return false;
}//当n*m数组为空||只有一个空元素时
int row =0,col = matrix[0].length-1;
while(row <= matrix.length-1 && col >= 0){
if(matrix[row][col] > target){
col--;
}else if(matrix[row][col] < target){
row++;
}else{
return true;
}
}
return false;
}
}
class Solution {//二分法解决有序问题
public int minArray(int[] numbers) {
int left = 0,right = numbers.length-1;
int m = 0;
while(left < right){
m = (left + right)/2;
if(numbers[m] > numbers[right]) left = m + 1;
else if(numbers [m] < numbers[right]) right = m;
else right--;
}
return numbers[left];
}
}
思路及证明过程来自: