【发布时间】:2012-06-11 10:23:53
【问题描述】:
我有一张尺寸为 m * n 的表格,如下所示
2 6 9 13
1 4 12 21
10 14 16 -1
关于这张表的一些限制:
- 每行中的元素按升序排序(自然 订购)。
- A -1 表示该单元格对于 计算,即那里不存在任何元素。
- -1 之后的行中不能出现任何元素。
- 所有单元格可以有一个介于 0 和 N 之间的正数或 一个 -1。
- 没有两个单元格具有相同的正数,即 -1 可以出现 多次,但没有其他号码可以。
问题:我想从表中找到一组包含 n 个数字的 S,其中该集合必须只包含每一行中的一个数字,并且 max(S) - min(S) 尽可能小。
例如上表给了我 S = 12,13,14。
如果能解决这个问题,我将不胜感激。我的解决方案很复杂,需要O(m^n) 这太多了。我想要一个最佳的解决方案。
【问题讨论】:
-
空间、时间或准确性方面的最佳解决方案?或所有这些。
-
就时间而言的最佳解决方案。准确是必须的(即我想要突出显示的东西并且对此没有妥协)
-
@dharam:这是一个有趣的问题。你为什么要解决它?它是如何产生的?
-
@Tom:我是一个更大问题的一部分......问题是在字符串中找到出现一系列字符的最小窗口......示例:考虑一个字符串“abzyxcdcbgahjkcbabghjcbja " 并且我想以任何顺序找到序列 "abc"。唯一的标准是窗口应该有最小长度。对于本例,窗口长度为 3,序列按 cba 顺序发生