1. 题目
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
2. 思路
- 给出两个指针,一个负责行
row_pointer
一个负责列col_pointer
- 计算出行的长度
array.length
,计算出列长度array[0].length
- 两个指针共同指向的数值作为标准
value = array[row_pointer][col_pointer]
- 拿
value
与目标值进行对比 - 由于整个矩阵排列是从左到右依次增大,从上到下依次增大,所以我们采用的方法是:行指针
row_pointer
从小到大扫过去,列指针col_pointer
从大到小扫过去。 - 当
value
的值比target
大,就说明从大到小的那个指针应该更小一点,同样地,如果value
的值比target
小,则说明从小到大的指针应该更大一点。
3. 代码
public class Solution {
public boolean Find(int target, int [][] array) {
int row_length = array.length;
int col_length = array[0].length;
int row_pointer = 0;
int col_pointer = col_length-1;
while(row_pointer < row_length && col_pointer >= 0){
int value = array[row_pointer][col_pointer];
if(value > target){
col_pointer = col_pointer - 1;
}else if(value < target){
row_pointer = row_pointer + 1;
}else{
return true;
}
}
return false;
}
}