【发布时间】:2016-05-09 09:39:48
【问题描述】:
我有以下数据结构和算法问题,我一直在尝试寻找更好的解决方案 -
给定
$x 是经度和 $y 是纬度
及以下字符
'>' 东 $x++ ; '
并将样本输入作为字符串 "^V>v^^>>v>>>>v^>v^v^>v>>^>v^v>vvv^^>>> v>>>^>v>>”
编写一个识别所有闭环的函数(下面给出的一些示例是闭环的示例) [ “^v”, “”, “>v
我已经能够在 O(n^2) 中解决这个问题,方法是从给定的输入中选择每个字符,然后遍历整个字符串并保留两个计数变量——一个用于垂直计数,另一个用于水平计数,在任何情况下点两者的值都为零,那么它是一个闭环。但我想知道是否有人可以更有效地做到这一点 - 也许我错过了一些算法。
感谢和问候, 毗婆娑
【问题讨论】:
-
提示:不要将其视为“搜索子字符串”。把它想象成“当你回到以前的地方时认识到”。任何时候你这样做,你就循环了。
-
对使用的空间有什么限制吗?使用 O(n) 空间,您可以在 O(n) 时间内完成。
-
@KumarVaibhav 它不一定是 O(n)。 “你以前去过
[3,5]位置吗”是在 O(1) 中回答的微不足道的操作。只需使用 2D 表格,其中包含您上次在特定地点的时间。 -
哦,如果我是你,我不会使用哈希。如果您有无限的空间,则不必要的复杂性。
-
初始化一个 2D 表需要 O(n^2) 时间,假设每个维度中的最大实体与 n 线性缩放