知识输出
试水
题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解法
最笨的方法 循环
public class Solution {
public boolean Find(int target, int [][] array) {
for(int i=0;i<array.length;i++){
for(int j=0;j<array[0].length;j++){
if(target==array[i][j]){
return true;
}
}
}
return false;
}
要注意array没有.size(),只有常量.length 。
既然说了横纵递增肯定有复杂度更小的算法
//从第一行最后一个元素开始比较,如果比target大则向左移动一个,比target小向下移动一个,然后从二维数组新获取到的这个值再和target比较。直到要找的这个值从数组范围内移动出去就停止,返回false
public class Solution {
public boolean Find(int target, int [][] array) {
int col = array[0].length;
int row = array.length;
int x = col - 1;
int y = 0;
while(x>=0 && y<=row-1){
int value = array[y][x];
if(value>target){
x--;
}
else if(value<target){
y++;
}
else{
return true;
}
}
return false;
}
}`