题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
第一想法是双重for循环,时间复杂度是
O
(
n
2
)
O(n^2)
O(n2) … (没有我for循环解决不了的问题,如果有,那就再加一层for循环)…然后 时间超了
二维数组是有序数组…有序查找 想到了二分查找,二维数组的时间复杂度是
O
(
n
l
o
g
n
)
O(nlogn)
O(nlogn)
因为每行的是递增的根据左边第一个来确定目标在数组的哪一行
然后再查找该行是否存在目标数据
public class Solution {
public boolean Find(int target, int [][] array) {
//得到数组的列
int high = array.length-1;
//得到数组初始的索引
int index = 0;
while(high >=0 && index <array[high].length-1){
if(target == array[high][index]){
return true;
} else if(target > array[high][index]){//判断这行是否有这个数据
i++;
} else{ //判断目标数据在哪一行
n--;
}
}
retrun false;
}
}