[leetcode-python3] 350. Intersection of Two Arrays II

shsh·2020년 11월 28일
0

leetcode

목록 보기
10/161

350. Intersection of Two Arrays II - python3

Given two arrays, write a function to compute their intersection.

My Answer 1: Accepted (Runtime: 64 ms / Memory Usage: 14.4 MB)

class Solution:
    def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
        result = []

        for i in nums1:
            if i in nums2:
                result.append(i)
                nums2.remove(i)
                    
        return result

맨첨엔 당연히 이중 for 문이 생각났지만^^ 이제 얘랑 이별했으므로..
'in' 을 사용해서 반복문은 하나만 사용했다
('in': 반복문 없이 배열 안에 값이 있는지 판단)

그리고 도플갱어를 찾은 nums2 의 값은 remove 해주었다
이거 안해주면 중복으로 들어감 !!!

하지만 런타임 20.94%....... 난 나쁘지 않다 생각^^

해시를 쓰면 좀 더 빠를까 싶어서 검색해보니 수제 해시를 써야한다;
이건 파이썬 기초 좀 다지고 사용해보는걸로..^^

Other Answer 1: (Runtime: 68 ms / Memory Usage: 14.4 MB)

class Solution:
    def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
        ans=[]
        for i in set(nums1).intersection(nums2):
            ans+=[i]*min(nums1.count(i),nums2.count(i))
        return ans

재귀에 미친 솔루션 18.94%

Other Answer 2: (Runtime: 48 ms / Memory Usage: 14.4 MB)

class Solution:
    def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
        
        if not nums1 or not nums2:
            return []
        
        
        res = []
        
        x = collections.Counter(nums1)
        y = collections.Counter(nums2)
        
        for key,value in x.items():
            if key in y:
                n = min(value,y[key])
                for i in range(n):
                    res.append(key)
        return res

collections 모듈의 Counter 함수도 꽤 많이 사용하는 듯함
(Counter 함수: 컨테이너에 동일한 값의 자료가 몇개인지를 파악하는데 사용하는 객체)
라는 것을 보니 해시와 비슷한 듯!!

근데 이거 90% 나온댔는데 내가 제출하면 왜 52.05% 죠..;

Other Answer 3: (Runtime: 44 ms / Memory Usage: 14.2 MB)

from collections import Counter


class Solution:
    def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
        return list((Counter(nums1) & Counter(nums2)).elements())

Other Answer 2와 비슷하지만 더 짧은 코드
79.33% 으로 이게 더 빠름

profile
Hello, World!

0개의 댓글

관련 채용 정보