我被給了一個問題:如何查找特定範圍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函數。
任何建議我讓它在特定的時間運行? :\