Q
數據結構訪問
0
A
回答
0
如果你想在程序中做到這一點:
只需創建包含類用戶類型變量的簡單數組。
用戶類應該具有屬性:userId,loginTime,logoutTime。
檢查用戶的總數誰登錄並在給定的時間範圍內退出將是這樣的:
for (user in userArray)
if (user.loginTime > inputLoginTime && user.logoutTime < inputLogoutTime)
count++;
您可以檢查用戶在O(n)的時間總數。
如果你想在服務器上做到這一點,例如。 MySQL的。
創建一個表格userId,loginTime,logoutTime作爲列的用戶。
SELECT COUNT(*) FROM User WHERE User.loginTime > inputLoginTime AND User.logoutTime < inputLogoutTime;
0
我不認爲有任何單一的數據結構,這將使你比下面提到的方法更好的複雜性: - 用於註銷 次
- 準備登錄時間兩個排序列表中的一個和其他。
- O(N logN)的
- 對於每個查詢,執行在兩個列表二進制搜索來計算之前給定的時間註銷的登錄次數 和數量。
- 爲O(log N)
- 接着的登錄的用戶的計數的數量將是(登錄 - 註銷)。
- O(1)
+0
對於第2點不幸的是,用戶總數與登錄總次數(和註銷)略有不同,如果單個用戶多次登錄和登出,他們仍然是單個用戶。我不認爲會有避免掃描整個範圍來過濾掉重複用戶的好方法。 – moreON
2
你要找的數據結構被稱爲interval tree,它基本上有一個像與間隔的開始格式的二進制搜索樹(登錄時間)作爲值(按照BST排序)。
這DS具有如下的時間複雜性:
- 添加的間隔(登錄-註銷):O(logN)的
- 刪除的間隔:O(logN)的
- 給定一個區間[開始找到重疊間隔:O(logN)
相關問題
- 1. 訪問python數據結構
- 2. 訪問postgres數據結構
- 3. 訪問結構數據(matlab)
- 4. 無法訪問結構數據
- 5. 從json結構訪問數據
- 6. 直接訪問數據結構的Java
- 7. 訪問數據結構中的元素
- 8. 訪問JRuby中的Scala數據結構
- 9. WPF數據訪問層體系結構
- 10. 訪問結構內的數據
- 11. 訪問數據庫表結構
- 12. 多線程訪問數據結構
- 13. 訪問結構
- 14. 訪問結構
- 15. 訪問結構數組
- 16. 訪問typedef結構數組
- 17. MATLAB訪問結構
- 18. 訪問在結構
- 19. 訪問和結構
- 20. 數據訪問層的推薦數據結構
- 21. 如何分配和訪問數據結構中的數據C
- 22. 訪問的結構是在結構
- 23. 訪問結構的結構裏面QML
- 24. 數據結構問題
- 25. 數據結構問題
- 26. 數據庫結構問題
- 27. 數據結構問題
- 28. 數據結構問題
- 29. 網站安全數據訪問體系結構問題
- 30. 函數指針:訪問結構中的數據?
一個天真的解決方案將是以下。讓數據按'loginTime'排序,並按照'logoutTime'排序數據的一個副本。要計算在A和B之間登錄並在C和D之間註銷的用戶,首先計算在A和B之間登錄的用戶S,然後計算在C和D之間登出的用戶T.返回S和T的交集。 – blazs
在採訪中,解決方案可能不是唯一重要的事情。您還需要通過提出問題來證明您的想法,從而完善這一點。您需要多少數據才能做到這一點可能是最重要的,因爲它會對良好的解決方案產生嚴重影響。數據的特徵 - 單個用戶的估計用戶數量/登錄/註銷頻率也影響良好的解決方案。 – moreON
可能你可以查看boost庫的多索引容器嗎? – DAG