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
。
首先我的想法是完全错误还是我在某处错误地做了可行的工具?
任何帮助将不胜感激。提前谢谢。
答案 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