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

TV Shows in C++: หาผลรวมระยะเวลาของรายการ TV ที่ดูมากที่สุด k อันดับแรก

กำหนดให้มีรายชื่อรายการ TV shows และระยะเวลาที่ดูแต่ละรายการ พร้อมกับจำนวนเต็ม k โดย shows[i] และ duration[i] แสดงชื่อและระยะเวลาที่บุคคลที่ i ดู เราต้องหาผลรวมระยะเวลาของ k รายการที่มีระยะเวลาสะสมมากที่สุด

ตัวอย่าง: shows = ["Castle Play", "Fairy Tale Series", "Castle Play", "Jerry Mouse", "Rich Boy"], duration = [6, 4, 6, 14, 5], k = 2 ผลลัพธ์คือ 26 (Castle Play: 12, Jerry Mouse: 14)

วิธีแก้ปัญหา

  1. ใช้ map รวมระยะเวลาตามชื่อรายการ
  2. นำค่าระยะเวลาที่รวมแล้วใส่ array และเรียงจากมากไปน้อย
  3. รวมค่า k อันดับแรก

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

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    int solve(vector<string>& v, vector<int>& d, int k) {
        map<string, int> m;
        for(int i = 0; i < v.size(); i++)
            m[v[i]] += d[i];
        vector<int> arr;
        for(auto& it : m)
            arr.push_back(it.second);
        sort(arr.rbegin(), arr.rend());
        int ret = 0;
        for(int i = 0; i < k; i++)
            ret += arr[i];
        return ret;
    }
};

int main() {
    vector<string> v = {"Castle Play", "Fairy Tale Series", "Castle Play", "Jerry Mouse", "Rich Boy"};
    vector<int> v1 = {6, 4, 6, 14, 5};
    Solution ob;
    cout << (ob.solve(v, v1, 2));
}

Input

{"Castle Play", "Fairy Tale Series", "Castle Play", "Jerry Mouse", "Rich Boy"}, {6, 4, 6, 14, 5}, 2

Output

26