Given two arrays, write a function to compute their intersection.
Example 1:
Input: nums1 = [1,2,2,1], nums2 = [2,2]
Output: [2,2]
Example 2:
Input: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
Output: [4,9]
Note:
- Each element in the result should appear as many times as it shows in both arrays.
- The result can be in any order.
Follow up:
- What if the given array is already sorted? How would you optimize your algorithm?
- What if nums1's size is small compared to nums2's size? Which algorithm is better?
- What if elements of nums2 are stored on disk, and the memory is limited such that you cannot load all elements into the memory at once?
思路:与上一题相比,稍微复杂一些, 需要注意在两个列表中分别存在的个数.
可以将两个列表进行排序,然后用两个指针,同时从头开始比较,这样遇到相同元素时,就可以统计出现次数.
class Solution:
def intersect(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: List[int]
"""
nums1.sort()
nums2.sort()
same=[]
a,b=0,0
while a<len(nums1) and b<len(nums2):
if nums1[a] == nums2[b]:
same.append(nums1[a])
a += 1
b += 1
elif nums1[a]<nums2[b]:
a += 1
else:
b += 1
return same