标签:bsp 数组 question nlogn -- 顺序 esc code boolean
两种思路
一种是:
把每一行看成有序递增的数组,
利用二分查找,
通过遍历每一行得到答案,
时间复杂度是nlogn
public
class
Solution {
public
boolean
Find(
int
[][] array,
int
target) {
for
(
int
i=
0
;i<array.length;i++){
int
low=
0
;
int
high=array[i].length-
1
;
while
(low<=high){
int
mid=(low+high)/
2
;
if
(target>array[i][mid])
low=mid+
1
;
else
if
(target<array[i][mid])
high=mid-
1
;
else
return
true
;
}
}
return
false
;
}
}
另外一种思路是:
利用二维数组由上到下,由左到右递增的规律,
那么选取右上角或者左下角的元素a[row][col]与target进行比较,
当target小于元素a[row][col]时,那么target必定在元素a所在行的左边,
即col--;
当target大于元素a[row][col]时,那么target必定在元素a所在列的下边,
即row++;
public
class
Solution {
public
boolean
Find(
int
[][] array,
int
target) {
int
row=
0
;
int
col=array[
0
].length-
1
;
while
(row<=array.length-
1
&&col>=
0
){
if
(target==array[row][col])
return
true
;
else
if
(target>array[row][col])
row++;
else
col--;
}
return
false
;
}
}
/* 思路
* 矩阵是有序的,从左下角来看,向上数字递减,向右数字递增,
* 因此从左下角开始查找,当要查找数字比左下角数字大时。右移
* 要查找数字比左下角数字小时,上移
*/
标签:bsp 数组 question nlogn -- 顺序 esc code boolean
原文地址:https://www.cnblogs.com/wanghuadongsharer/p/9526381.html