1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| class Solution: def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]: ''' result = [] # 和位置无关,单纯的看元素有无交集,别想复杂了。 inner = set(nums2) & set(nums1) def find_appear_num(nums,i): # 计算交集元素出现次数 nums.sort() # 找右边索引 left = 0 right = len(nums)-1 while left<=right: mid = (left+right)>>1 if nums[mid]<=i: left = mid+1 else: right = mid-1 last = left # 找左边索引 left = 0 right = len(nums)-1 while left<=right: mid = (left+right)>>1 if nums[mid]<i: left = mid+1 else: right = mid-1 pro = right return last-pro-1 # 求出出现次数 for i in inner: appear_num = min(find_appear_num(nums1,i),find_appear_num(nums2,i)) # print(i,appear_num,find_appear_num(nums1,i),find_appear_num(nums2,i)) for n in range(appear_num): result.append(i) return result ''' inner = set(nums1) & set(nums2) result = [] for i in inner: result += [i]*(min(nums1.count(i),nums2.count(i))) return result
|