做法一:
解释:因为数组的每一行是递增的,所以每次只要比较每一行的最后一个数据,如果target小于当前行的最后一个数据,就遍历这一行。
算法复杂度:最好O(n)只进行了一次for循环便找到, 最坏O(n2)就是每一行都要进行遍历
做法二:将遍历当前行改为二分查找
注意:代码中有一个被注释掉的break,原先我以为只要找到当前可能存在的一行就不需要再遍历后面的行了。
但是存在一种情况,如下图:
像这样的一个二维数组的话,当 target = 12 时,会在第二行先停下来进行二分查找,但是12是在第三行,所以不能提前break。
算法复杂度:最好O(log n)即第一次进行递归时就找到,最坏O(n log n)即每一行都要递归查找。