【发布时间】:2017-05-15 09:20:00
【问题描述】:
我在编码测试中遇到过这个问题,找不到有效的方法。
给定一个矩阵A,移动规则如下:
- 只能从任何元素向右或向下移动
- 只能在我们最初开始的同一行或同一列元素内移动。
- 只有当一个元素的值小于你开始的元素的值时,你才能访问或跨越一个元素。
查找可以访问的元素总数,如果一个从元素 A(i,j) 开始,其中 i-> 行并且
j-> 列。
注意:您必须为每个矩阵元素打印此输出。
输入矩阵:
1 2 3
2 3 1
3 1 2
输出:
1 1 3
1 3 1
3 1 1
说明:从 1 (i=0,j=0) 行开始,我们无法进一步遍历,因此可访问节点 = 1
此外,在列方面它是相同的。因此,对于 (i=0,j=0),最大节点总数为 1。
我的方法:
尝试了一个正常的解决方案,我们从每个元素遍历右侧和向下元素并找到两个可访问元素计数的最大值。 但这不是有效的。 有人可以告诉一个有效的方法来做到这一点。 提前致谢。
【问题讨论】:
-
这种方法有重复。例如,当您计算
[0][2]元素(即 3)时,您已经计算了[1][2](即 1)。试试看是否可以重复使用信息。 -
@StutiRastogi:这里不是这样,正如你看到的第三条规则。对于 [1][2] 可访问元素计数仅为 1(本身),因为下一个向下 [2][2] 元素 =2 大于此值。但是对于 [0][2] 可访问计数为 3,因为 [1][2] , [2][2] 都更小并且包含自身。否则我可以使用 DP。
-
“在我们最初开始的元素的行和列内移动”——这是什么意思?
-
@n.m.这意味着向右或向下移动时没有锯齿形图案。因此,对于任何节点,两条路径被认为是向下(同一列增加行)和向右(同一行增加列)。
-
我认为这将是“在同一行 或 列内移动”。
标签: algorithm matrix data-structures