สมมติว่าเรามีสองอาร์เรย์ A และ B มีองค์ประกอบน้อยในอาร์เรย์เหล่านี้ เราต้องหาจุดตัดของพวกมัน ดังนั้น ถ้า A =[1, 4, 5, 3, 6] และ B =[2, 3, 5, 7, 9] ทางแยกจะเป็น [3, 5]
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- รับสองอาร์เรย์ A และ B
- ถ้าความยาวของ A น้อยกว่าความยาวของ B ให้เปลี่ยนมัน
- คำนวณความถี่ขององค์ประกอบในอาร์เรย์และเก็บไว้ใน m
- สำหรับแต่ละองค์ประกอบ e ใน B ถ้า e มีหน่วยเป็น m และความถี่ไม่เป็นศูนย์
- ลดความถี่ m[e] ลง 1
- แทรก e ลงในอาร์เรย์ผลลัพธ์
- คืนค่าอาร์เรย์ผลลัพธ์
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
class Solution(object): def intersect(self, nums1, nums2): """ :type nums1: List[int] :type nums2: List[int] :rtype: List[int] """ 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]))
อินพุต
[1,4,5,3,6] [2,3,5,7,9]
ผลลัพธ์
[3,5]