【问题标题】:Find unique number in Integer array/list using python使用python在整数数组/列表中查找唯一数字
【发布时间】:2021-05-23 10:07:43
【问题描述】:

给定一个大小为 N 的整数数组/列表(ARR)。其中 N 等于 [2M + 1]。 现在,在给定的数组/列表中,“M”个数字出现两次,一个数字只出现一次。 查找并返回数组/列表中唯一的数字。

注意:根据给定条件,唯一元素始终存在于数组/列表中。

我已经使用 WHILE 循环完成了这个问题,但是当我尝试使用 FOR 循环执行此操作时,它不起作用

而且,我已经看到了一些解决此类问题的代码,但由于我是一名学习者,并且只完成了一些基本的 Python,所以还不知道复杂性(O^N)。

请提前帮助和感谢

WHILE 循环代码:


def find_unique(li,n):
    for i in range(n):
        j = 0
        while(j < n):
            if i != j:
                if li[i] == li[j]:
                    break
            j = j + 1
        if j == n:
            return li[i]
n = 7
li = [2,3,1,6,3,6,2]
ele = find_unique(li,n)
print(ele)

FOR 循环代码:

def find_unique(li,n):
    for i in range(n):
        for j in range(0,n):
            if i == j:
                continue
            if(li[i] == li[j] and j ==n):
                    return li[i]
        

n = 7
li = [2,3,1,6,3,6,2]
ele = find_unique(li,n)
print(ele)


【问题讨论】:

  • 转换为 numpy.ndarray 或 pandas 数据框。他们都有一个功能。 numpy.org/doc/stable/reference/generated/numpy.unique.htmlpandas.pydata.org/docs/reference/api/pandas.unique.html 。您可以查看文档中的一些示例。 Python 在 for 循环中很慢,因此,只要有可能,就转换为 numpy 数组并使用其中的函数,因为它们非常快。如果您想了解更多相关信息,则称为矢量化。
  • 在for循环中,j 会到达n吗?
  • j==n 究竟有什么用途?
  • @SinaMeftah 它与问题无关,因为作者想在代码中找到问题。
  • @DeepakGouda 是的,我知道 j 没有达到 n 。但是,如何纠正它。

标签: python python-3.x


【解决方案1】:
def unique(arr,N):
    ans=0
    for i in range(N):
        ans=ans^arr[i]
    return ans

【讨论】:

  • 我喜欢这个答案 - 我知道必须有一种数学方法才能做到这一点。 (顺便说一句,您可以通过直接迭代列表来简化这一点。“for n in arr: ans = ans ^ n”)
  • 我不得不说这个想法很棒,但似乎并不那么令人满意。例如,[2, 3, 6, 3, 6, 2, 3, 11]
  • @pppig 您的测试用例很好,但是在问题中已经提供了每个数字都成对出现并且只有一个唯一值,但在您的情况下,3 出现了 3 次,这违反了问题陈述 。希望我能够回答您的问题。
  • @AdityaVikram 哦,你说的对,看了你的回答,忍不住想了解一下它的思路,以至于忘记了问题的描述,这个思路真的很棒。跨度>
【解决方案2】:

我只是替换了一些代码

def find_unique(li,n):
    for i in range(n):
        for j in range(0,n):
            if i != j:
                if li[i] == li[j]:
                    break
            j = j + 1
        if j == n:
            return li[i]
n = 7
li = [2,3,1,6,3,6,2]
ele = find_unique(li,n)
print(ele)

【讨论】:

  • 谢谢您的回答。我只想知道为什么有 j = j + 1,如果这是由 for 循环完成的
【解决方案3】:
from collections import Counter

li = [2, 3, 1, 6, 3, 6, 2]
print([key for key, val in Counter(li).items() if val == 1])

# [1]

【讨论】:

    【解决方案4】:
    from collections import Counter
    def find_unique(li,n):
        a = Counter(li).most_common()
        return a[len(a)-1][0]    
    n = 7
    li = [2,3,1,6,3,6,2]
    ele = find_unique(li,n)
    print(ele)
    

    【讨论】:

      【解决方案5】:

      因为这是一个非常特殊的案例 - 所有项目都重复了两次,但只有一次。您可以使用此属性制作简单的单线

      find_unique = lambda li, n: 2*sum(set(li)) - sum(li)
      

      一旦你定义了函数 - 现在使用它

      n = 7
      li = [2,3,1,6,3,6,2]
      ele = find_unique(li, n)
      print(ele)
      

      【讨论】:

        猜你喜欢
        • 2015-12-08
        • 2021-11-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-24
        • 1970-01-01
        • 2021-05-31
        相关资源
        最近更新 更多