我最近接受了海灣地區一家公司的採訪(CA,USA)。其中一個問題是簡單地找出一個字符串是否有重複的字符(我簡化了一個冗長的問題)。數組優先於set還是map?
eg: input : "qwerrty" output : True
我用python的實現代碼。
我給出了一個解決方案,它使用一個集合來跟蹤迭代過程中遇到的元素。
但是面試官要我使用數組[255]跟蹤中遇到的字符。
雖然我使用其中一方還是挺舒服的,我的意見是使用一套簡單,因爲我們是在浪費255個字符的空間時,我們使用數組。這是因爲(正如我們都知道的),最初我們創建一個arr [255] = 0所有元素爲零,然後將ASCII等效索引值增加1.
另一方面,集合只會花費內存元素訪問。
因爲他(種)認爲使用了一組數組我很想知道,如果他是技術上是正確的。在這種情況下數組是首選的嗎?如果是這樣,爲什麼?
這裏的大O時間複雜度實際上並不是衡量這種效率的一個很好的度量方法,因爲有一個有效的輸入長度上限,並且因爲這裏的常數因子將主宰其他條件。另外,如果集合由散列表支持,則向集合中添加字符可以帶*期望* O(1)時間。 – templatetypedef
@templatetypedef我不認爲這個問題提到了輸入長度的任何上限。你對散列表的預期時間複雜性是正確的。 O(n)可能更糟。 – user1537085
輸入大小沒有上限,但由於鴿子的原理,任何足夠長的字符串必須在某處發生碰撞。 – templatetypedef