题目
给定一个 M × N 的矩阵,找出其中最长的递增序列的长度
递增序列的方向可以是当前元素的上下左右,但不能是对角线,也不可以跨越边界
Example1
|
|
返回值是4,最长的递增序列是:1,2,6,9
Example2
|
|
返回值是4,最长的递增序列是:2,4,5,6 或者 3,4,5,6
题目来源: Longest Increasing Path in a Matrix
思路
方法很直观,依次计算每一个元素的最长递增路径长(下面简称LI),然后选取最大的值作为最终结果。
然后要考虑的是,如何计算每一个元素的LI。很容易想到,每个元素有2-4个相邻元素,要计算当前元素的LI,
先要找出值比当前元素大的相邻元素,并计算每个相邻元素的LI,然后找出最大的相邻元素LI,加上1就是当前元素的LI。如果所有相邻元素的值都不比当前元素大,则当前元素的LI为0。
上述就是一个递归过程,递归结束点就是值大于等于所有相邻元素的元素。
按照以上思路实现应该就可以输出正确答案了,但是未必能被Accepted(猜的,我没试过)。因为上述算法虽然能输出正确结果,但是每个元素都可能计算多次LI。所以,我们还应该对每个元素的LI进行缓存,确保每个元素只计算一次。
代码
|
|