【发布时间】:2017-01-22 19:22:13
【问题描述】:
编辑:我试图解决一个 spoj 问题。这是问题的链接: http://spoj.pl/problems/BRCKTS
我可以想到两种可能的数据结构来解决问题,一种使用段树,另一种使用 BIT。 我已经使用分段树实现了该解决方案。我已经阅读了关于 BIT 的内容,但我不知道如何用它来做特定的事情(我在下面提到过)
我正在尝试检查仅包含( 或) 的给定字符串中的括号是否平衡。
我正在使用 BIT(二进制索引树)来解决问题。
我遵循的程序如下:
我正在使用一个大小等于字符串中字符数的数组。
我将 ) 的 -1 和 ( 的 1 分配给相应的数组元素。
仅当满足以下两个条件时,字符串中的括号才平衡。
- 整个数组的累计和为零。
- 最小累积和为非负数。 即数组的所有前缀的累积和的最小值是非负的。
使用 BIT 检查条件 1 很简单。 我在检查条件 2 时遇到问题。
【问题讨论】:
-
你选择了 BIT 方法还是做作业?
-
有一个使用堆栈的更简单的解决方案。如果这是家庭作业并且您需要使用 BIT,请将其标记为这样。
-
您可以在没有 BIT 的情况下执行此操作,方法是使用计数器迭代字符串。为每个
(加 1,为)减 1,检查计数器是否低于零,并检查最后是否等于零。 (感谢疯狂) -
确实可行,并且可以从堆栈解决方案中得出:当您读取
)时,从堆栈中删除最顶部的(。如果没有,就没有解决方案。当您阅读(时,将其推入堆栈。最后,堆栈必须为空。如果您也可以拥有[和],这可以很容易地扩展到工作。 -
不,这不是作业。我正在尝试通过在线法官解决问题。根据问题陈述,使用堆栈肯定会使我的解决方案超时。我已经使用分段树解决了这个问题。我可以发布问题的链接吗??
标签: algorithm binary-indexed-tree