错误定式:没看清题意,直接套之前的类似题,leetcode.78,但是该题的条件有上一行行尾小于下一行行首,因此扩展成一维数组仍然有序
思路一:暴力破解,双循环一一遍历
时间O(M*N) (N^2)
空间O(1)
思路二:每一行做二分
import java.util.*;
public class Solution {
public boolean Find(int target, int [][] array) {
if(array==null || array[0].length==0)
return false;
for(int i=0;i<array.length;i++)
{
int left=0;
int right=array[i].length-1;
while(left<=right)
{
int mid=left+(right-left)/2;
if(array[i][mid]==target)
return true;
else if(array[i][mid]>target)
right=mid-1;
else
left=mid+1;
}
}
return false;
}
}
时间O(nlogn) 二分时间log2^n
空间O(1)
思路三:线性查找,注意题目条件,行递增,列递增,形成一个递增的半十字
public class Solution {
public boolean Find(int target, int [][] array) {
if(array==null||array.length==0)
return false;
int row=0;
int col=array[0].length-1;//不要偷懒写成行数,行数和列数不一定相等
while(row<array.length && col>=0)
{
if(array[row][col]==target)
return true;
else if(array[row][col]>target)
col--;
else
row++;
}
return false;
}
}
思路四:递归?