微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

所以这是一个 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?