今天学到一个不错的题~
记录一下~
题目:
给定一个二维数组,数组里的值每一行和每一列都是按从小到大的顺序排放,且每个数仅出现一次,如何在O(n+m)的时间里快速查找到某个值x所在的位置呢?
下面给出一些思路:
首先,由于每行每列都按照从小到大的顺序排列,所以:
我们要先知道这个前提:
若某行的第一个位置的值大于x,说明x一定不在这一行上;若某行的最后一个位置的值小于x,说明x一定不在这一行上;
同理,若某一列的最上面那个位置的值大于x,说明x一定不在这一列上;若某一列的最下面那个位置的值小于x,说明x一定不在这一列上;
了解了这个以后我们就要想办法从哪个位置出发可以在O(n+m)的时间里找到x所在位置呢?
先思考一下~
当我们可以成功满足行列的查找规律(一个判断大于一个判断小于)时我们就可以快速找到位置啦,所以我们可以从二维数组的右上角或者是左下角出发开始寻找。
下面举个例子:
所以我们在判断时只需要记录一下移动位置就可以在O(n+m)的时间里成功找到啦~
代码略,挺简单的……