题目
在一个二维数组中(每个一维数组长度相等),每一行按照从左到右递增的顺序排序,每一列按照从上到下递增的顺序排序,输入一个整数,判断该数组中是否含有该整数。
算法
我用了两个循环直接去比较是否含有该数,跑出来大概200ms、使用空间大概17000k,是符合题目要求的。
public boolean Find(int target, int [][] array) {
int len = array.length;
if(len == 0){
return false;
}
for(int i=0; i<len; i++){
int tempLen = array[i].length;
if (tempLen>0){
if(target < array[i][0] && target<array[i][tempLen-1]){
continue;
}
}
for(int j=0; j<tempLen; j++){
if(target == array[i][j]){
return true;
}
}
}
return false;
}
不过我并没有用上题目当中所指出的数组是有顺序的这一特点,如果利用这个的话,其实应该有更好的解决方案。
public boolean Find(int target, int [][] array) {
int column = array.length-1;
int row = 0;
while(column>=0 && row<array[column].length){
if (target > array[column][row]){
row++;
}else if(target<array[column][row]){
column--;
}else{
return true;
}
}
return false;
}
但是这样跑出来的时间和空间好像差不太多。