我被给了一个问题:如何查找特定范围FAST中的字符串数量?
给定一个字符串列表和一个查询列表:START和END,它们都是字符串。我必须找到字符串是在[START范围
例如数量,END): 字符串列表:A, AA, AB, CD, ZS, XYZ
一个查询列表:
A, AA
A, CC
AB, ZZ
AC, CD
输出应该是:
1
3
3
0
我解决这个问题的方法是:同时通过字符串列表进行迭代,我通过一个插入新的字符串创建一个AVL树。 (起初,我使用了不平衡的BST,但我得到了时间限制。)进行比较时,我使用java String中的compareTo函数。
创建AVL树后,我运行从[开始,结束]计数的查询。 我的方法是,
1. let v = root.
2. if v==null -> return 0
else if v.value < start -> count(v.right)
else if v.value >= end -> count(v.left)
else 1 + count(v.right) + count(v.left)
然而,我仍然有时间限制pernalty :(
因此,我通过散列到双和,而不是使用的compareTo改变方法通过创建哈希函数,我比较哈希值代替。
但是,我仍然有时间限制!
所以,我子树大小的值保存到每一个顶点,而不是使用次数或时间,我添加更多的条件语句,其中一些可ü选择子树的大小,而不是递归地调用count函数。
任何建议我让它在特定的时间运行? :\