TV 프로그램 목록과 다른 재생 시간 목록, 정수 k가 있다고 가정하고 여기에서 show[i]를 표시하고 duration[i]는 i번째 사용자가 시청한 이름과 재생 시간을 표시합니다. 사람, 우리는 가장 많이 본 k 프로그램의 총 시청 시간을 찾아야 합니다.
따라서 입력이 다음과 같은 경우:["캐슬 플레이", "동화 시리즈", "캐슬 플레이", "제리 마우스", "리치 보이"], 지속 시간:[6, 4 , 6, 14, 5] 및 k =2이면 출력은 26이 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
하나의 맵 정의
-
n :=v의 크기
-
initialize i :=0의 경우, i
-
m[v[i]] :=m[v[i]] + d[i]
-
-
배열 arr 정의
-
각 키-값 쌍에 대해 m
-
arr의 끝에 값을 삽입
-
-
arr 배열을 역순으로 정렬
-
ret :=0
-
initialize i :=0의 경우, i
-
렛 :=렛 + 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