Leetcode#217包含重复 - 我的代码出了什么问题?

时间:2018-03-13 18:15:45

标签: python-3.x

Problem 217: Contains Duplicate

  

问题描述:

     

给定一个整数数组,查找数组是否包含任何重复项。   如果任何值出现至少两次,则您的函数应返回true   在数组中,如果每个元素都是不同的,它应该返回false。

我的Python解决方案:

class Solution:
    def containsDuplicate(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """

        from functools import reduce
        if len(nums) < 2:
            return False
        else:
            return bool(reduce(lambda x, y: not (bool(nums.count(x) == 1) and bool(nums.count(y) == 1)), nums))

我认为and nums.count(x) == 1 x nums [1, 2, 3]之间使用True操作可以得到问题所需答案的倒数,但似乎无法得到它工作

有谁能告诉我为什么这是错的?例如,当输入为False时,我输出RecyclerView而不是MainActivity

首先我的想法是完全错误还是我在某处错误地做了可行的工具?

任何帮助将不胜感激。提前谢谢。

2 个答案:

答案 0 :(得分:1)

减少onyl比较成对:

来自doc:

reduce(lambda x,y:x+y, [1,2,3,4,5]) ==  ((((1+2)+3)+4)+5)

你的reduce会产生一个布尔值作为输出。适用于[1,2,3,4,5],这将导致

not (bool(nums.count(1) == 1) and bool(nums.count(2) == 1)), nums) = False
not (bool(nums.count(False) == 1) and bool(nums.count(3) == 1)), nums) = True 
not (bool(nums.count(True) == 1) and bool(nums.count(4) == 1)), nums) = True 
not (bool(nums.count(True) == 1) and bool(nums.count(5) == 1)), nums) = True 
           #        ^^^^^^ always 0 ==> so reduce is always True

reduce只比较成对,因此它不适合手头的任务:[1,2,3,4,2]

def dupes3(nums):
    return sorted( nums.count(x) for x in nums)[-1] > 1  

def dupes2(nums):
    from collections import Counter 
    return Counter(nums).most_common()[0][1]>1

def dupes(nums): # imho easiest one
    return len(set(nums)) < len(nums)

答案 1 :(得分:0)

class Solution(object):
    def containsDuplicate(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """
        if len(set(nums)) == len(nums):
            return False
        return True