Cho hai mảng A, B. Tìm giao của chúng (phần tử chung, tính cả số lần xuất hiện). Ví dụ: A = [1,4,5,3,6], B = [2,3,5,7,9] → [3,5].
Giải pháp
Các bước:
- Nếu len(A) < len(B) thì hoán đổi.
- Tính tần suất phần tử trong mảng lớn hơn lưu vào m.
- Duyệt B: nếu phần tử có trong m và tần suất > 0, giảm tần suất, thêm vào kết quả.
- Trả về kết quả.
Ví dụ
Triển khai Python:
class Solution(object):
def intersect(self, nums1, nums2):
m = {}
if len(nums1)<len(nums2):
nums1,nums2 = nums2,nums1
for i in nums1:
if i not in m:
m[i] = 1
else:
m[i]+=1
result = []
for i in nums2:
if i in m and m[i]:
m[i]-=1
result.append(i)
return result
ob1 = Solution()
print(ob1.intersect([1,4,5,3,6], [2,3,5,7,9])) Đầu vào
[1,4,5,3,6] [2,3,5,7,9]
Đầu ra
[3,5]