题目:
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
一开始理解错了题意,后来才发现题目说的可能是这种样例:
3
1 2 3
2 3 4
4 5 6
而我一开始以为都是
3
1 2 3
4 5 6
7 8 9
这样的话每行最大的就是最右边的数,每次和最右边的数比较,比他大就去下一行比较,小了就在当前行比较,时间复杂度不会有O(nm),最大的是O(n+m),m较小的话可以忽略。
public class Solution {
public boolean Find(int target, int [][] array) {
int x = 0;
int y = array[0].length - 1;
while( x >= 0 && x < array.length && y >= 0 && y < array[0].length ){
if( target == array[x][y] ){
return true;
}
else if( target < array[x][y] ){
y--;
}
else{
x++;
}
}
return false;
}
}

129

被折叠的 条评论
为什么被折叠?



