题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路:自己只可以想到就是暴力搜索和利用每行进行二分搜索(但是不记得二分搜索的终止条件了),因此最后只用了一种方法实现
自己的解法(采取的是暴力搜索)
public class Solution {
public boolean Find(int target, int [][] array) {
boolean a1=false;
for(int i=0;i<array.length;i++){
for(int j=0;j<array[i].length;j++){
if(array[i][j]==target){
a1=true;
break;
}
}
}
return a1;
}
}
参考到的更佳的解法(从左下角开始搜索,如果大于目标值则往上走,小于目标值则往右走)
链接:https://www.nowcoder.com/questionTerminal/abc3fe2ce8e146608e868a70efebf62e
来源:牛客网
public
class
Solution {
public
boolean
Find(
int
target,
int
[][] array) {
int
len = array.length -
1
;
int
i =
0
;
while
((len >=
0
) && (i < array[
0
].length)){
if
(array[len][i] > target){
len--;
}
else
if
(array[len][i] < target){
i++;
}
else
{
return
true;
}
}
return
false
;
}
}
二分搜索解法(参考别人的)
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
;
}
}