您的位置:首页 > Web前端

【剑指Offer】二维数组中的查找$2.3.1

2017-09-30 12:49 218 查看
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和整数,判断数组中是否有该整数。

private boolean find(int[][] arr, int row, int col, int key) {
if (arr == null) {
throw new IllegalArgumentException("给定数组不能为空");
}
if (row <= 0 || col <= 0) {
throw new IllegalArgumentException("给定非法行值列值row:" + row + ", col:" + col);
}

for (int i = 0; i < row; i++) {
//从每行的最大值的列开始
for (int j = col - 1; j >= 0; j--) {
//如果该值等于
if (arr[i][j] == key) {
return true;
}
//如果该值小于key
else if (arr[i][j] < key) {
//那么该行比他更小的都应该丢弃掉
break;
}
//如果该值大于key
else if (arr[i][j] > key) {
//该列以下已经没有符合key要求的了,col-1
col--;
}
}

}

return false;
}

@Test
public void runWithMe() {
int key = -1;

int len = 4;
int[][] arr = new int[][]{
{1, 2, 8, 9},
{2, 4, 9, 12},
{4, 8, 10, 13},
{7, 10, 11, 14}
};

System.out.println("数组中有包含吗:\n" + find(arr, len, len, key));
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: