力扣算法_961 在长度2N的数组中找出重复N次的元素

题目

给你一个整数数组 nums ,该数组具有以下属性:

  • nums.length == 2 * n.

  • nums 包含 n + 1 个 不同的 元素

  • nums 中恰有一个元素重复 n

找出并返回重复了 n 次的那个元素。(2<=n<=5000)

示例

示例1:

输入:nums = [1,2,3,3]
输出:3

示例2:

输入:nums = [2,1,2,5,3,2]
输出:2

示例3:

输入:nums = [5,1,5,2,5,3,5,4]
输出:5

思路

方法一:将nums排序,则最中间的两个值其中一个必为返回值;可以通过中间两个值的左右两侧,分别判断是否为返回值。

方法二:建立一个set变量,依次判断nums中的元素是否在set中,若不存在,则放入set中;否则为返回值。

代码

方法一:

class Solution:
    def repeatedNTimes(self, nums: List[int]) -> int:
        n = len(nums)
        nums.sort()
        if nums[n // 2] == nums[n // 2 + 1] or nums[n // 2] == nums[n // 2 - 1]:
            return nums[n // 2]
        else:
            return nums[n // 2 - 1]

方法二:

class Solution:
    def repeatedNTimes(self, nums: List[int]) -> int:
        res = set()
        for num in nums:
            if num not in res: res.add(num)
            else: return num

你可能感兴趣的:(leetcode,leetcode,算法)