给出一个正整数列表,将最大的重复元素与变量maximum
关联。如果列表中没有重复项,请将-1与maximum
关联。
答案 0 :(得分:2)
有多种方法可以完成此操作,具体取决于您的时间/空间复杂性要求。这里有一些想法:
使用一组
def max_dup(lst):
seen = set()
for i in sorted(lst, reverse=True):
if i in seen:
return i
seen.add(i)
return -1
from collections import Counter
def max_dup(lst):
cnt = Counter(lst)
return max((k for k in cnt if cnt[k] > 1), default=-1)
from itertools import groupby
def max_dup(lst):
for k, g in groupby(sorted(lst, reverse=True)):
if len(list(g)) > 1:
return k
return -1
在我的测试中(对于较小的列表),使用一组似乎是最快的方法,但是您的里程可能会有所不同。
答案 1 :(得分:1)
您也可以在没有计数器的情况下执行此操作:
def max_dup(numbers):
desc_numbers = sorted(numbers, reverse=True)
for i in range(1, len(desc_numbers)):
if desc_numbers[i] == desc_numbers[i - 1]:
return desc_numbers[i]
return -1
print(max_dup([1,2,3,4,5,5,6,7])) # 5
print(max_dup([1,2,3,4,5,6,7])) # -1
答案 2 :(得分:0)
这可以通过 itertools.groupby 完成,我们首先必须对列表进行排序,然后如果对应的k
具有{{ 1}}进入新列表。然后,我们可以在该列表上使用list(g)
len > 1
展开:
max
答案 3 :(得分:0)
对列表进行排序,成对地遍历列表,在第一个匹配对上退出。
def maxdup(l):
l = sorted(l, reverse=True)
for i in range(1, len(l)):
if l[i-1] == l[i]:
return l[i]
return -1