二维数组中的查找
题目:在一个二维数组中,每一行都按照从左到右的顺序递增,每一列都按照从上到下的顺序递增,判断一个数是否在数组中
例如:
1 | 2 | 8 | 9 |
2 | 4 | 9 | 12 |
4 | 7 | 10 | 13 |
6 | 8 | 11 | 15 |
如果对此类题型不是很了解的同学,拿到这个问题,脑海里蹦出的第一个思路就是逐个数字比较,分三种情况:
- 相等,结束查找过程
- 若<target 则i++,j++ 在右边和下边继续找
- 若>target 则i--,j-- 在左边和上边继续找
这样的做法会导致一个问题,就是每次比较导致下一次查找是两个相互重叠的区域
对此,需要考虑从右上角或左下角查找
public class Solution {
public boolean Find(int [][] array,int target) {
int row=0;
int col=array[0].length-1;
while(row<=array.length-1&&col>=0){
if(target==array[row][col])
return true;
else if(target>array[row][col])
row++;
else
col--;
}
return false;
}
}