如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>=array[i][i]){
if(target<=array[array.length-1][i]){
for(k=i;k<array.length;k++){
if(target==array[k][i])
return true;
}
}
if(target<=array[i][j]){
for(k=i;k<j+1;k++){
if(target==array[i][k])
return true;
}
}
}
}
return false;
}。
本文介绍了如何在一个二维数组中,每一行和每一列都递增排序的情况下,通过对角线遍历法查找指定整数。通过比较目标值与当前对角线元素,逐步缩小搜索范围,实现小于O(m+n)的时间复杂度。示例代码展示了这种方法的实现细节,包括避免数组越界的问题。
886

被折叠的 条评论
为什么被折叠?



