예 1 :
입력 : nums1 = [1,2,2,1] nums2 = [2,2]
출력 [2]
예 2 :
입력 : nums1 = [4,9,5] nums2 = 9,4,9,8,4]
출력 [9,4]
설명 :
-
각 요소의 출력은 고유해야합니다.
-
우리는 출력의 순서를 고려하지 않을 수 있습니다.
내 자신의 (닭 요리) 아이디어에 대한 첫 번째 이야기 : 첫째, nums2의 값이, 몇 가지 단어, 새로운 목록을 추가할지 여부를 결정하는 첫 번째 배열 (nums1), 다음주기에 무거운 가고 싶습니다.
예 1의 코드는 다음과 같이 :
1 급 해결책 : 2 데프 교차점 (자기, nums1리스트 [INT] nums2리스트 [INT]) -> 리스트 [INT] : 3 NUM1 = 세트 (nums1) 4 NUM = I 에 대한 난 에 NUM1 경우 I 에서 nums2] 5 리턴 NUM
예 2와 유사한 방법도 있습니다 :
1 급 해결책 : 2 데프 과 set_intersection (자기, SET1, SET2) 3 창 [X 대 X 의 SET1 경우 X 의 SET2] 4 5 데프 교차점 (자기, nums1, nums2) : 6 "" " 7 : 입력 nums1리스트 [INT] 8 : 입력 nums2리스트 [INT] 9 : RTYPE리스트 [INT] 10 "" " 11 SET1 = 세트 (nums1) 12 SET2 = 세트 (nums2) (13) (14) 의 경우 렌 (SET1) <LEN (SET2) 15 리턴 self.set_intersection (SET1, SET2) 16 다른 : 17 리턴 self.set_intersection (SET2, SET1)
그러나 그의 실행 시간 :
나는 빠른 24ms를보다, 생각을 자극하는 질문, 복잡도 분석,
-
시간 복잡도 : n 및 m은 어레이의 길이 O (m + n)이 O (m + N). O (n)은 O (N)을 수집 컬렉션에 전환, O (m) O (m) nums2 시간 및 평균적인 경우 nums1 스위칭 시간은, 동작의 세트는 O (1) O 1)
-
공간 복잡도 : O (m + n)이 O (m + n)은, 최악의 경우는 어레이의 모든 요소가 다른 점이다.
전능 파이썬의 경우, 내장 교차 방법은 예 3의 다음과 같은 절차를 고려 :
클래스 해결책 : 데프 교차점 ( 자기, nums1, nums2) "" " : 입력 nums1리스트 [INT] : 형식 nums2리스트 [INT] : RTYPE리스트 [INT] " "" SET1 = 세트 ( nums1) SET2 = 세트 ( nums2) 반환 목록 ( SET2 & SET1)
위의 예 2보다 약간 느린 속도지만, 코드가 간단하고 장점과 단점을 많이하지만 그는 시간을 실행중인 경우 어떻게 좀 할 말이를 볼 수 있습니다.
복잡도 분석 :
-
시간 복잡도는 : 일반적으로 O (m + n)이 O (m + n)이되면, 최악의 경우에는 O (m의 \ 시간 n)은 O (N × m)이다.
-
공간 복잡성 : 어레이의 모든 요소가 동일하지 때 최악의 경우는, O (m + n)이 O (m + N)이다.
나는 해당이 너무 많은 음식이라고 할 수 있습니다. . . . . . . .
초보자
공유와 성공, 당신의 천적이 날입니다, 기억 삼중의 품질!
출처 : 유지 버튼 (LeetCode) 링크 : https://leetcode-cn.com/problems/intersection-of-two-arrays