Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมหาลำดับอันดับทีมจากคะแนนเสียงใน Python


มีรายการคะแนนเสียง votes แต่ละรายการเป็นสตริงตัวอักษรพิมพ์เล็ก แสดงลำดับความชอบ อันดับขึ้นอยู่กับจำนวนคะแนนเสียงอันดับ 1 ถ้าเท่ากันดูอันดับ 2 ต่อไป ถ้ายังเท่ากัน เรียงตามตัวอักษร

เช่น votes = ["zyx","zxy","xyz"] ให้ "zxy" เพราะ z ได้อันดับ 1 มากที่สุด

ขั้นตอนการแก้ปัญหา

  • count := ความยาวสตริงใน votes
  • cand := dict เริ่มต้น list ขนาด count เติม 0
  • นับคะแนนแต่ละตำแหน่งสำหรับแต่ละผู้สมัคร
  • เรียงผู้สมัครตามคะแนน (มากไปน้อย) แล้วตามตัวอักษร
  • รวมเป็นสตริงคืนค่า

ตัวอย่างโค้ด

from collections import defaultdict
class Solution:
    def solve(self, votes):
        count = len(votes[0])
        cand = defaultdict(lambda: [0]*count)
        for v in votes:
            for i,c in enumerate(v):
                cand[c][i] += 1
        return "".join(sorted(cand.keys(), key=lambda x: (cand[x], -ord(x)), reverse=True))

ob = Solution()
votes = ["zyx","zxy","xyz"]
print(ob.solve(votes))

อินพุต

["zyx","zxy","xyz"]

เอาต์พุต

zxy