二维数组中的查找(Java)

本文介绍了如何在已排序的二维数组中查找特定整数。通过分析二维数组的特性,采用从右上角开始的搜索策略,每次根据比较结果排除一行或一列,逐步缩小搜索范围,实现高效查找。这种方法避免了复杂的脑力风暴,提高了查找效率。
摘要由CSDN通过智能技术生成

题目:

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

第一思路:在二维数组中选取一个数字,分3种情况来查找的过程。

(1)选取的数字和target相等,则查找过程结束;
(2)选取的数字小于target,则要查找的数字在当前选取项的右方或者下方;
(3)选取的数字大于target,则要查找的数字在当前选取项的上方或者左方。

我第一次接触这个题目时,傻傻的从array[0][0]开始分析上面的3种情况,然后就陷入苦恼的脑力风暴中,深深不得解决之道,因为左方和上方或者右方和下方的重叠区域,使我陷入了苦海。

最优解思路:后来读了剑指offer的解题思路得知,如果我们每次的比较能排除某一列或者某一行来解决找到target问题,这道题

目就很快解决。故需要选取右上方的数组元素,或者左下方的数组元素。

这样每次比较一次target都会排除一行或者一列,随着比较次数的增加,我们需要查找的target范围越来越小。问题得到解决。

具体实现:

(1)首先选取数组中右上角的数字:如果该数字等于要查找的数字,查找过程结束;

(2)如果该数字大于要查找的数字,则剔除这个数字所在的列;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值