时间限制:1秒 空间限制:32768K
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路
如图有这么一个30*30的二维数组(实际情况存在x*y的二维数组,x!=y)。
因为数是从左到右,从上到下依次递增,若某行末位的数比要找的数小,说明该数不会在这一行;因此,若某行首位的数比要找的数大,后面的数则会更大,也不可能在这一行。
思路拆分:
- 从第一行开始扫描,若首位或末位的数为要找的数,直接返回;
- 若满足“首位的数比要找的数小”且“末位的数比要找的数大”这一条件,说明要找的数有可能在这一行,此时应该遍历该行数组;
- 遍历时,若能找到即可返回;
- 若当前遍历的数比要找的数大,那么后面的数肯定也比要找的数大,就没必要继续遍历,跳到下一行扫描;
Python2.7.3 代码实现
结果
- 运行时间:480ms
- 占用内存:5724K