สมมติว่าเรามีรายการของสตริงที่เรียกว่ารายการแสดง นอกจากนี้ยังมีรายการของจำนวนเต็มที่เรียกว่าระยะเวลาและอีกค่าหนึ่งคือ 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