如何计算数组中的两个元素是否为对?

问题描述

所以这是一个 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()])

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...