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

รายการทีวีในภาษา C++


สมมติว่าเรามีรายการรายการทีวี และรายการระยะเวลาอื่น และจำนวนเต็ม k ที่นี่แสดง[i] และ Duration[i] แสดงชื่อและระยะเวลาที่ดูโดย ith เราต้องหาระยะเวลาดูรวมของรายการที่มีคนดูมากที่สุด k รายการ

ดังนั้น หากอินพุตเป็นแบบที่แสดง:["Castle Play", "Fairy Tale Series", "Castle Play", "Jerry Mouse", "Rich Boy"], ระยะเวลา:[6, 4 , 6, 14, 5] และ k =2 ผลลัพธ์จะเป็น 26

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

  • กำหนดหนึ่งแผนที่ m

  • n :=ขนาดของวี

  • สำหรับการเริ่มต้น i :=0 เมื่อ i

    • m[v[i]] :=m[v[i]] + d[i]

  • กำหนดอาร์เรย์ arr

  • สำหรับแต่ละคู่ของคีย์-ค่า m

    • ใส่ค่าที่ท้าย arr

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

  • ยกเลิก :=0

  • สำหรับการเริ่มต้น i :=0 เมื่อฉัน

    • ret :=ret + arr[i]

  • รีเทิร์น

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

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int solve(vector<string>& v, vector<int>& d, int k) {
      map <string, int> m;
      int n = v.size();
      for(int i = 0; i < n; 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));
}

อินพุต

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

ผลลัพธ์

26