【发布时间】:2017-06-19 01:36:19
【问题描述】:
我正在尝试找到一种算法,该算法可以返回列表中重复项对的数量。
示例: 输入:[13,4,8,4,13,7,13,9,13] 输出:7 (4 个 13 出现 6 对,两个 4 出现 1 对)
我的算法可以变得更高效吗?我希望它比 Theta(n^2) 更快
这是我所拥有的:
my_List=[13,3,8,3,13,7,13,9,13]
pairs=0
alreadySeen=[]
for element in my_List:
howMany=0
if element in alreadySeen:
False
else:
howMany=my_List.count(element)
pairs=pairs+((howMany*(howMany-1))/2)
howMany=0
alreadySeen.append(element)
print(pairs)
【问题讨论】:
-
怎么能
4 13's comes out to 6 pairs,为什么不能2 pairs? -
我不知道
python,我可以写这个是java/php/js/perl/c/c++ -
4 个 13 将组成 6 个不同的独特对。 (13.1,13.2) (13.1,13.3) (13.1,13.4) (13.2, 13.3) (13.2, 13.4) (13.3, 13.4)
-
伪代码也很好,我正在寻找它的效率。
-
我想到了两个选项: 1. 使用 while 循环而不是迭代元素,然后在计算完已经看到的元素后删除它们,这样您就可以在较小的列表上进行操作。 2. 对列表进行排序,然后只计算连续的。找到一个简单的方程,例如从 4 个相同的数字到产生 6 对。
标签: python algorithm performance iteration big-o