3、SecondArrayFind

题目

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,
每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

输入

int[][] inputArray = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
int target = 6;

输出

true

实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class SecondArrayFind {

public static boolean secondArrayFindTarget(final int[][] inputArray, final int target) {
if (inputArray == null) {
return false;
}
if (inputArray[0] == null) {
return false;
}
int rowSize = inputArray.length;
int columnSize = inputArray[0].length;
int row = 0;
int column = columnSize - 1;
while (column >= 0 && row < rowSize) {
int curValue = inputArray[row][column];
if (curValue < target) {
row++;
} else if (curValue > target) {
column--;
} else {
break;
}
}
return column >= 0 && row < rowSize;
}
}

单元测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class SecondArrayFindTest {

@Test
public void testNullInput() {
Assert.assertFalse(SecondArrayFind.secondArrayFindTarget(null, 100));
}

@Test
public void testNormalFound() {
int[][] inputArray = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int target = 6;
Assert.assertTrue(SecondArrayFind.secondArrayFindTarget(inputArray, target));
}

@Test
public void testNormalNotFound() {
int[][] inputArray = {{1, 2, 3}, {6, 7, 8}, {7, 8, 9}};
int target = 5;
Assert.assertFalse(SecondArrayFind.secondArrayFindTarget(inputArray, target));
}
}