ได้รับอาร์เรย์ nums ต้องการหาจำนวนคู่ (i, j) ที่ nums[i] == nums[j] และ i != j
ตัวอย่าง: nums = [1,3,1,3,5] ผลลัพธ์คือ 4 คู่คือ (0,2), (2,0), (1,3), (3,1)
ขั้นตอนการแก้ปัญหา
- สร้างดิกชันนารี
dนับความถี่ของแต่ละค่า - สำหรับแต่ละค่า
cที่มีความถี่มากกว่า 1 ให้บวกd[c] * (d[c] - 1)เข้ากับผลลัพธ์ (เพราะแต่ละค่าสามารถจับคู่ได้ d[c]*(d[c]-1) คู่) - คืนค่าผลรวม
ตัวอย่างโค้ด Python
def solve(nums):
d = {}
for c in nums:
d[c] = d.get(c, 0) + 1
res = 0
for c in d:
if d[c] > 1:
res += d[c] * (d[c] - 1)
return res
# ทดสอบ
nums = [1, 3, 1, 3, 5]
print(solve(nums)) # ผลลัพธ์: 4
อินพุตตัวอย่าง
[1,3,1,3,5]
เอาต์พุตตัวอย่าง
4