欢迎光临散文网 会员登陆 & 注册

开始学算法(刷算法题)过程记录 3

2022-05-07 11:28 作者:学途压力大  | 我要投稿

题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数(返回true或false)

题目关键:数组中最右上角的数字是最上面一行最大的最右边一列最小的,最左下角的数字是最左边一列最大的和最下面一行最小

图例

解题思路:

假如找7,从右上角看,9比7大,最右边一列比9还大,可以排除最右一列

同理,还是取最右上角的,8 还是比7大 再排除最右一列

再看最右上角,2比7小,2左边的比2都小,所以可以排除最上面一行,同理可以排除4所在行

再取右上角,每次循环前会进行一次判断右上角是否等于要找的数,发现是7返回true

算法实现:

这是从右上角开始找 还有一种解法是左下角开始找,原理是一样的,对比要找的数大小排除行列

不能选左上角或右下角原因是 都小 和 都大。1是最上面一列最小,又是最左边最小。无法排除行或列

开始学算法(刷算法题)过程记录 3的评论 (共 条)

分享到微博请遵守国家法律