题目:在一个二位数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样一个二维数组和一个整数,判断数组中是否含有该整数。
例如:在一下数组中寻找数字7
1 2 8 9
2 4 9 12
4 7 10 13
6 8 11 15
思路:由于数组是从左到右,从上到下递增的,那么可以选取右上角的元素9,由于9>7,那么9同列的数都>=9,所以可以排除9这一列,剩下4行3列,再去右上角8,8>7,排除8这一列,剩下4行2列,取右上角2,2<7,由于2现在这行的数(只剩两列了)都<=2,所以可以排除2这一行,剩下3行2列,取右上角4,4<7排除4这一列,剩2行2列,取右上角7,7=7,找到元素。
解法:(时间复杂度为O(logn),空间复杂度为O(1))
public class Test1 {
public static void main(String[] args) {
int[][] a={{1,2,8,9},{2,4,9,12},{4,5,10,13},{7,8,11,15}};
boolean b=findNumber(a,7);
if(b){
System.out.println("数组中含有该元素");
}else{
System.out.println("数组中没有该元素");
}
}
private static boolean findNumber(int[][] a, int i) {
if(a==null||a.length<=0){
return false;
}
int row=0;
int col=a[0].length-1;
while(row<a.length&&col>=0){
int p=a[row][col];
if(p==i){
return true;
}else if(p>i){
col--;
}else{
row++;
}
}
return false;
}
}
今天一分的努力换取明天一分的轻松,明天十分的努力可能都换不来后天一分的轻松。