题目
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解题思路
这题乍一看还是听费劲的,而且根本没给测试用例,这可咋验证对错?既然题里没给,那就自己写个简单的测试用例吧:
我是这么做的,创建一个5x5的二维数组,并且按照题目要求简单的添加上数字。我是输出5x5个0,然后先按行赋值,然后再给每列重新赋值。输出是这个样:
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9
然后就可以思考这题了。我们观察上面的输出:
左下角和右上角是个好地方,都可以作为开始。拿左下角来说:如果target小于左下角的5,则向上移动,如果大于左下角的5,则向右移动。这样循环下去,走完了还没找到那应该是真找不到了。。。
具体的解法写在了代码中:
完整代码
/**
* Created by AceCream on 2017/3/22.
* 在一个二维数组中,每一行都按照从左到右递增的顺序排序,
* 每一列都按照从上到下递增的顺序排序。请完成一个函数,
* 输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
*/
public class Test{
public boolean Find(int target, int [][] array) {
//显示二维数组:
// for (int i=0;i<array.length;i++){
// for (int j=0;j<array.length;j++){
// System.out.print(array[i][j]+" ");
// }
// System.out.println();
// }
int len = array.length-1;
int wid = 0;
while (len>=0 && wid<array[0].length){
if (array[len][wid]>target){
len--;
}else if (array[len][wid]<target){
wid++;
}else {
return true;
}
}
return false;
}
public static void main(String[] args) {
int temp = 99;
int[][] a = new int[5][5];
for (int i=0;i<a.length;i++){
for (int j=0;j<a.length;j++){
a[i][j]=j+1;
}
for (int k=0;k<a[0].length;k++){
a[i][k] = i+k+1;
}
}
Test test = new Test();
System.out.println(test.Find(temp,a));
}
}
网友评论