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

โปรแกรมค้นหาอันดับสุดท้ายของทีมจากอันดับสูงสุดไปต่ำสุดใน python


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

ดังนั้น หากอินพุตเป็นเหมือนเสียงโหวต =["zyx", "zxy", "xyz"] เอาต์พุตจะเป็น "zxy" เนื่องจาก z ได้รับการตั้งค่าสูงสุดเป็นจำนวนสูงสุด จึงเป็นอันดับแรก จากนั้น x ได้รับคะแนนความพึงพอใจสูงสุดเป็นอันดับสอง และ y ไม่ได้รับคะแนนโหวตความพึงพอใจสูงสุด

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • นับ :=ความยาวของสตริงในการโหวต
  • cand :=แผนที่ว่างที่แต่ละคีย์จะเป็นรายการการนับขนาด และในขั้นต้นจะเต็มไปด้วย 0
  • สำหรับแต่ละ v ในการโหวต ทำ
    • สำหรับแต่ละดัชนี i และค่า c ใน v ทำ
      • เพิ่มแคน[c, i] ขึ้น 1
    • จัดเรียงรายการแคนตามลำดับจากมากไปหาน้อยตามมูลค่า เมื่อค่าเท่ากัน ให้จัดเรียงตามตัวอักษร
    • ส่งกลับสตริงโดยเชื่อมองค์ประกอบที่เรียงลำดับแล้ว

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

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