Algorithm/LeetCode

[Leetcode] 961. N-Repeated Element in Size 2N Array

Eric_Park 2021. 8. 22. 16:35

You are given an integer array nums with the following properties:

  • nums.length == 2 * n.
  • nums contains n + 1 unique elements.
  • Exactly one element of nums is repeated n times.

Return the element that is repeated n times.

 

Example 1:

Input: nums = [1,2,3,3] Output: 3

Example 2:

Input: nums = [2,1,2,5,3,2] Output: 2

Example 3:

Input: nums = [5,1,5,2,5,3,5,4] Output: 5

 

Constraints:

  • 2 <= n <= 5000
  • nums.length == 2 * n
  • 0 <= nums[i] <= 104
  • nums contains n + 1 unique elements and one of them is repeated exactly n times.

 

### my solution : 시간초과 
class Solution:
    def repeatedNTimes(self, nums: List[int]) -> int:
        lennums = int( len(nums)/2 )
        A = dict( zip( nums, [nums.count(i) for i in nums] ) )
        bb = {v:k for k,v in A.items()}
        return bb.get(lennums)

# 해설 : key, value 탐색을 위해서 dict 을 순회하는 로직에서 
#        시간을 많이 잡아먹었다.
### recommended solution

import collections
class Solution(object):
    def repeatedNTimes(self, A):
        count = collections.Counter(A)
        for k in count:
            if count[k] > 1:
                return k


### value count 를 dict 자료구조에 저장한 것까지는 동일. 
### 탐색하는 로직을 쓰지 않고 dict.values() 에서 드러나는 정답의 패턴으로 문제를 해결.