要求:列表中有1000000個元素,取值范圍是[1000, 10000),設計一個函數找出列表中的重復元素。
def find_dup(items: list): dups = [0] * 9000 for item in items: dups[item - 1000] += 1 for idx, val in enumerate(dups): if val > 1: yield idx + 1000
點評:這道題的解法和計數排序的原理一致,雖然元素的數量非常多,但是取值范圍[1000, 10000)并不是很大,只有9000個可能的取值,所以可以用一個能夠保存9000個元素的dups列表來記錄每個元素出現的次數,dups列表所有元素的初始值都是0,通過對items列表中元素的遍歷,當出現某個元素時,將dups列表對應位置的值加1,最后dups列表中值大于1的元素對應的就是items列表中重復出現過的元素。