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