【问题标题】:Math formula behind this find_single_in_triplets() function?这个 find_single_in_triplets() 函数背后的数学公式?
【发布时间】:2021-07-20 00:59:35
【问题描述】:

我遇到了一个有趣的功能,它是在整数列表中找到唯一的单个数字(出现一次),所有其他数字都是正数并显示为三元组(出现 3 次)。 它可以正常工作,如下所示。

但是,我无法弄清楚它源自什么数学公式。希望有人能解开这个谜题。

def find_single_in_triplets(L):
    orig_sum = sum(L)
    set_sum  = sum(set(L) 
    return (set_sum * 3  - orig_sum) // 2    # given the single num. 

find_single_in_triples([1, 2, 3, 4, 6, 2, 3, 4, 1, 3, 2, 1, 4])  # -> 6

【问题讨论】:

  • find_single_in_triplets(L)是函数名吗?
  • 是的。 `L` 是列表。

标签: python math


【解决方案1】:

更多的是一个数学问题,但是,这里的推理非常简单。 获取包含这个未知号码x 的号码列表L。 如果我们添加 2 个额外的 x 以便所有数字出现 3 次,那么总和 sum(L) + 2*x 当然将等于 sum(set(L))*3。 因此sum(set(L))*3 - sum(L) = 2*x。只需除以 2 即可完成。

当然,这不仅适用于三元组,我们还可以泛化

def find_single_in_n(L, n):
    orig_sum = sum(L)
    set_sum  = sum(set(L))
    return (set_sum * n  - orig_sum) // (n-1)

find_single_in_n([1,1,1,1,2,3,3,3,3], 4)

【讨论】:

  • 正确。谢谢!
  • 会建议一个小的编辑 - ` ... // (n-1) `
猜你喜欢
  • 2016-02-22
  • 2013-07-30
  • 2012-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多