如何解决如何计算数组中的两个元素是否为对?
所以这是一个 HackerRank 问题,但我放弃了,没有人用 Python (3) 完成它。
问题来了:
有一大堆袜子必须按颜色搭配。给定一个代表每只袜子颜色的整数数组,确定有多少双袜子颜色匹配。
所以你得到了袜子的数量和一个代表袜子的整数数组,它看起来如下:
n = 9
ar = [1,2,1,3,4,1]
正确答案是 3 对。请注意,这是两对 2 和一对 1。这是我尝试的方法,有什么想法吗?
def sockMerchant(n,ar):
"Count number of pairs of socks in array"
pairs = 0
for i in ar:
if i == ar[i +1] & (pairs/2 == 0) :
pairs = pairs + 1
print(pairs)
return
sockMerchant(n,ar)
它返回 1,这是不正确的。
解决方法
您可以使用字典将颜色映射到计数,然后将计数相加成对:
def sockMerchant(n,ar):
"Count number of pairs of socks in array"
colors_to_counts = {}
for color in ar:
colors_to_counts.setdefault(color,0)
colors_to_counts[color] += 1
return sum(count // 2 for count in colors_to_counts.values())
您的方法不起作用,因为除了评论者指出的内容之外,您只是在检查连续的对。
,这可以在一行中解决。另请注意,不需要 n
,因为它是多余的:
sum(ar.count(i) // 2 for i in set(ar))
,
您可以使用列表推导式和 Counter
:
ar = [1,2,1,3,4,1]
from collections import Counter
a = Counter(ar)
# go through each type of sock and count how many there are (`k`),store how many pairs (`k//2`) and then sum up all of the pairs (`sum`)
return sum([(k//2) for (k,v) in a.items()])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。