สมมติว่าเรามีรายการตัวเลข A ต้องหาค่าซ้ำทั้งหมดและลบ occurrence สุดท้ายของแต่ละค่าซ้ำ
ตัวอย่าง: [10, 30, 40, 10, 30, 50] → [10, 30, 40, 50] (ลบ 10 ตัวที่ 2 และ 30 ตัวที่ 2)
ขั้นตอนการแก้ปัญหา (Two-pass với Frequency Count)
- นับความถี่ทั้งหมดใน
d - วนลูปผ่านรายการพร้อมนับ
seen:- หาก
seen[num] == d[num]และd[num] > 1→ นี่คือ occurrence สุดท้าย ให้ลบ - เพิ่ม
seen[num]
- หาก
- คืนค่ารายการที่ลบแล้ว
ตัวอย่างโค้ด Python
class Solution:
def solve(self, nums):
seen = {}
d = {}
for i in range(len(nums)):
if nums[i] not in d:
d[nums[i]] = 1
else:
d[nums[i]] += 1
i = 0
while i < len(nums):
n = d[nums[i]]
if nums[i] not in seen:
seen[nums[i]] = 1
else:
seen[nums[i]] += 1
if n == seen[nums[i]] and n > 1:
nums.pop(i)
i -= 1
i += 1
return nums
ob = Solution()
print(ob.solve([10, 30, 40, 10, 30, 50])) # Output: [10, 30, 40, 50]
อินพุต
[10, 30, 40, 10, 30, 50]
เอาต์พุต
[10, 30, 40, 50]