牛客网上面练的第一道编程题,,,终于有次百分之百通过了。。。
思路:
一个
for
循环,每一行用个二分查找,因为题目中数组是有效的,所以很容易的就朝二分走了
public
class
Solution {
public
boolean
Find(
int
target,
int
[][] array) {
boolean
result=
false
;
int
row = array.length;
int
lie = array[array.length-
1
].length;
if
(lie==
0
){
result =
false
;
}
else
{
for
(
int
i=
0
;i<row;i++) {
int
right =
0
;
int
left = lie -
1
;
System.out.println(
"i="
+ i);
if
(result = search(right, left, i, array, target)) {
break
;
}
}
}
return
result;
}
public
boolean
search(
int
right,
int
left,
int
i,
int
[][] array,
int
target){
int
mid = (right+left)/
2
;
boolean
result =
false
;
if
(array[i][mid]==target){
result =
true
;
}
else
if
(array[i][mid]>target && right<left){
left = mid -
1
;
result = search(right,left,i,array,target);
}
else
if
(array[i][mid]<target && right<left){
right = mid +
1
;
result = search(right,left,i,array,target);
}
return
result;
}
}