您的位置:首页 > 职场人生

面试题3 二维数组中的查找 java实现

2015-05-19 20:30 519 查看
题目:在一个二维数组中每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。完成一个函数,输入这样的数组和一个整数,判断数组中是否含有该整数。

思路:由于该二维数组从左到右,从上到下均为顺序递增的。因此右下角与左上角的数字均大于或小于其周围数字,如果选择改组作为起始点,则无法确定下一步的方向。而右上角的数字是同行最大值、同列最小值,选择该点为起始点则可以根据该数子与目标的比较确定下一步是向右移还是向下移,同理选择左下角也可以实现该函数。

这里选择右上角为起始点。public class ArrayFind {
private static int[][] A;

private static int[][] initArray() {
int[][] A = { { 1, 2, 8, 9 }, { 2, 4, 9, 12 }, { 4, 7, 10, 13 },
{ 6, 8, 11, 15 } };
return A;
}

private static void find(int target) {
boolean found=false;
if (A != null) {
int row =0;
int column = A[0].length-1;
int key;
while (row < A.length && column >= 0) {
key = A[row][column];
System.out.println("now key="+key);
if (key == target) {
found=true;
break;
} else if (key < target) {
++row;
} else {
--column;
}
}
if(found){
System.out.println("find the targe "+target+" in :" + row + ","
+ column + "!");
}
else{
System.out.println("Sorry not found!");
}
}

}

public static void main(String[] args) {
// TODO Auto-generated method stub
A=initArray();
find(14);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息