面试题3-二维数组中的查找

题目

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

解题

从左下角/右上角开始寻找。如从左下角开始,当当前数值小于target时,向上部区域查找(向上移动一排);当当前数值大于target时,向右部区域查找(向右移动一列)。这样一行/一列地剔除数据,就会方便很多。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Solution {
public boolean Find(int target, int [][] array) {
int cur_row = array.length-1;
int cur_col = 0;
while (cur_row >= 0 && cur_col < array[0].length){
if (target > array[cur_row][cur_col]){
cur_col += 1;
} else if (target < array[cur_row][cur_col]){
cur_row -= 1;
} else if (target == array[cur_row][cur_col]){
return true;
}
}
return false;
}
}

references

牛客网讨论与题解