ภาพรวม
โจทย์ตรวจสอบว่ามีผู้มีสิทธิเลือกตั้ง (voter) ที่ลงคะแนนซ้ำหรือไม่ โดยข้อมูลเป็นลิสต์ของคู่ [candidate_id, voter_id] ต้องคืน True ถ้ามี voter_id ซ้ำ
ตัวอย่าง
อินพุต: [[5, 1], [5, 0], [5, 4], [5, 3], [5, 0]]
voter_id 0 ปรากฏ 2 ครั้ง → True
วิธีแก้ (ใช้ Set)
- สร้าง Set ว่าง
all_voters - วนลูปแต่ละคะแนน เสมอเพิ่ม
vote[1](voter_id) ลง Set - ถ้าจำนวนสมาชิกใน Set < จำนวนคะแนนทั้งหมด → มีซ้ำ → คืน True
โค้ด Python
class Solution:
def solve(self, votes):
all_voters = set()
for vote in votes:
all_voters.add(vote[1])
return len(all_voters) != len(votes)
ob = Solution()
votes = [[5, 1], [5, 0], [5, 4], [5, 3], [5, 0]]
print(ob.solve(votes))
วิธีอื่น (ตรวจจับระหว่างทาง)
def has_duplicate_voter(votes):
seen = set()
for _, voter_id in votes:
if voter_id in seen:
return True
seen.add(voter_id)
return False
ความซับซ้อน
- เวลา: O(N) โดย N = จำนวนคะแนน
- พื้นที่: O(N) สำหรับ Set
ผลลัพธ์
True