代码之家  ›  专栏  ›  技术社区  ›  John Thomas

如果数组中的两个元素是成对的,如何计数?

  •  -1
  • John Thomas  · 技术社区  · 5 年前

    所以这是一个HackerRank问题,但我放弃了,没有人用Python(3)完成它。

    问题是:

    有一大堆袜子必须按颜色搭配。给定一个表示每个袜子颜色的整数数组,确定有多少对颜色匹配的袜子。

    因此,向您提供了socks数和表示socks的整数数组,如下所示:

    n = 9
    ar = [1,2,1,2,2,3,4,2,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,这是不正确的。

    3 回复  |  直到 5 年前
        1
  •  1
  •   Lex Nasser    5 年前

    您可以使用字典将颜色映射到计数,然后将计数成对求和:

    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())
    

    你的方法不起作用,因为除了评论者指出的以外,你只检查连续的配对。

        2
  •  2
  •   Selcuk    5 年前

    这可以用一行字来解决。还要注意的是 n 不需要,因为它是多余的:

    sum(ar.count(i) // 2 for i in set(ar))
    
        3
  •  0
  •   Ajay    5 年前
    ar = [1,2,1,2,2,3,4,2,1]
    from collections import Counter
    a=Counter(ar)
    g={k:v for (k,v) in a.items() if v>2}
    sum(g.keys())