题目:
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
我的方案:
按照对角线 从(0,0),(1,1)...查找,
public class Solution {
public static boolean Find(int target, int [][] array) {
int width=array[0].length-1
int height=array.length-1;
if(array==null||array.length==0||(array.length==1&&array[0].length==0)) return false;//判断数组是否为空
FindView(target,0,0,height,width,array);
if(array[0][0]==-1) {
return true;
}else {
return false;
}
}
public static void FindView(int target,int a,int b,int c,int d,int [][] array) {
//array[a][b]=1;
for(int i=a,y=b;;i++,y++) {
if(array[a][b]>target||array[0][0]==-1) {
break;
}
else {
if(array[i][y]>target) {
FindView(target,i,b,c,y-1,array);
FindView(target,a,y,i-1,d,array);
}
if(array[i][y]==target) {
//return true;
System.out.println("写入完成!");
array[0][0]=-1;//改变数组第一个值,
break;
}
if(i+1>c&&y+1>d) {
//return false;
break;
}if(i==c) {
i=c-1;
}if(y==d) {
y=d-1;
}
}
}
}
}
标准答案:
从左下角元素往上查找,右边元素是比这个元素大,上边是的元素比这个元素小。于是,target比这个元素小就往上找,比这个元素大就往右找。如果出了边界,则说明二维数组中不存在target元素。
链接:https://www.nowcoder.com/questionTerminal/abc3fe2ce8e146608e868a70efebf62e
public
class
Solution {
public
boolean
Find(
int
target,
int
[][] array) {
int
rows = array.length;
int
cols = array[
0
].length;
int
i=rows-
1
,j=
0
;
while
(i>=
0
&& j<cols){
if
(target<array[i][j])
i--;
else
if
(target>array[i][j])
j++;
else
return
true
;
}
return
false
;
}
}