如int [] []arrays= {
{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};Find(7,arrays);
本题博主采用对角线遍历法。
1 | 2 | 8 | 9 |
2 | 4 | 9 | 12 |
4 | 7 | 10 | 13 |
6 | 8 | 11 | 15 |
具体地说1.先对比target是否大于1小于6 如果是在1,2,4,6查找7,没有则在1,2,8,9中查找。在没有转到2。
2.同理看7是否小于4,大于8.若是在4,7,8中查找,若不是则找4,9,12。依次类推。
需要注意的是如果给我们[6][5]大小的数组,那么array[i][i]可能会出现数组越界所以要记住事先判定。
此时每个数的查找代价小于o(m+n)
具体代码如下:
int j=0;int k=0;
for(int i=0;i<array.length;i++){
j=array[i].length-1;
if(i>j)
return false;
if(target>