1. 题目描述


2. 思考

- 上面图片中,我们要找8,我们从左下角开始向右上角找,使用2个指针i ,j。
- i = 4,j=0时,temp=18,其右边都>18,而 8 < 18,所以18右边的元素都可以排除,然后 i - - 。

- i=3,j=0时,temp = 10,8 < 10,10右边排除,i - -;

- i=2,j=0时,temp=3,3<8,3上方的都<3,所以排除,且3!=8,所以 j ++ 。

- i=2,j=1,temp=6,6<8,6上方排除,j ++ 。

- i=2,j=2,temp=9,9>8,右边排除,i - - 。

- i = 1,j=2,temp=8,找到了数,直接返回true。
- 如果找到最后结束了,都没有找到,那就是没有这个数!
3. 此题思路

4. 代码
class Solution {
public boolean findNumberIn2DArray(int[][] matrix, int target) {
// 定义2个指针
// i 指针从左下角开始
int i = matrix.length -1;
int j = 0;
// i>=0 ,j 要小于列数
while(i>=0 && j < matrix[0].length){
// 当前值
int temp = matrix[i][j];
// target < temp
if(target < temp){
i--;
}
// target > temp
else if(target > temp){
j++;
}
// 不是大于,也不是小于,那就只能等了
else{
return true;
}
}
// 循环结束还没找到就意味着没有这个数
return false;
}
}
本文详细介绍了如何在二维数组中高效地查找目标数值,通过从左下角开始,使用两个指针i和j进行遍历。当目标值小于当前值时,移动i指针;当目标值大于当前值时,移动j指针。最终找到目标值返回true,未找到则返回false。这种方法避免了不必要的遍历,提高了查找效率。

被折叠的 条评论
为什么被折叠?



