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

โปรแกรมค้นหาระยะเวลารวมของรายการ K ที่มีคนดูมากที่สุดใน Python


สมมติว่าเรามีรายการของสตริงที่เรียกว่ารายการแสดง นอกจากนี้ยังมีรายการของจำนวนเต็มที่เรียกว่าระยะเวลาและอีกค่าหนึ่งคือ k ซึ่งแสดง[i] และระยะเวลา[i] แสดงถึงรายการและระยะเวลาที่คน ith เฝ้าดูอยู่ เรามี เพื่อค้นหาระยะเวลาทั้งหมดที่รับชมของรายการที่มีผู้ชมมากที่สุด k รายการ

ดังนั้นหากอินพุตเป็นเหมือนรายการ =["The BGT", "Jack jumper", "The BGT", "Jokers Company", "Music magic"] ระยะเวลา =[10, 8, 10, 18, 9] k =2 จากนั้นเอาต์พุตจะเป็น 38 เนื่องจาก 2 อันดับแรกที่มีผู้ชมมากที่สุดคือ "Jokers Company" และ "The BGT" และระยะเวลาทั้งหมดคือ 18 และ 10 + 10 =20

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

  • ถ้ารายการว่างเปล่าหรือระยะเวลาว่างเปล่าหรือ k เป็น 0 แล้ว

    • คืนค่า 0

  • d :=พจนานุกรมว่างเปล่า

  • สำหรับผมอยู่ในช่วง 0 ถึงขนาดของรายการ ทำ

    • d[shows[i]] :=d[shows[i]] + ระยะเวลา[i]

  • l :=รายการใหม่

  • สำหรับแต่ละ i ใน d ทำ

    • ใส่ d[i] ต่อท้าย l

  • เรียงลำดับรายการ l ในลำดับย้อนกลับ

  • ผม :=0

  • ตอบ :=0

  • ในขณะที่ฉัน

    • ตอบ :=ตอบ + l[i]

    • ผม :=ผม + 1

  • ส่งคืนคำตอบ

ตัวอย่าง

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

from collections import defaultdict
def solve(shows, durations, k):
   if not shows or not durations or not k:
      return 0

   d = defaultdict(int)

   for i in range(len(shows)):
      d[shows[i]] += durations[i]

   l = []
   for i in d:
      l.append(d[i])
   l.sort(reverse=True)
   i = 0
   answer = 0
   while i < k:
      answer += l[i]
      i += 1
   return answer

shows = ["The BGT", "Jack jumper", "The BGT", "Jokers Company",
"Music magic"]
durations = [10, 8, 10, 18, 9]
k = 2
print(solve(shows, durations, k))

อินพุต

["The BGT", "Jack jumper", "The BGT", "Jokers Company", "Music magic"], [10, 8, 10, 18, 9], 2

ผลลัพธ์

38