C++ 中的電視節目
假設我們有一組電視節目和一組時長列表以及一個整數 k,其中 shows[i] 和 duration[i] 表示第 i 個人的觀看節目和時長,我們需要找到觀看次數最多的 k 個節目的總時長。
因此,如果輸入類似於 shows: ["城堡播放", "童話劇集", "城堡播放", "傑瑞鼠", "富家男孩"], duration: [6, 4, 6, 14, 5] 和 k = 2,那麼輸出將是 26。
要解決此問題,我們將按照以下步驟操作
定義一個 map
n := v 的大小
for 初始化 i := 0,當 i < n,更新(i 加 1),執行以下操作:
m[v[i]] := m[v[i]] + d[i]
定義一個數組 arr
for m 的每個鍵值對 it
在 arr 的末尾插入 it 的值
按降序對陣列 arr 進行排序
ret := 0
for 初始化 i := 0,當 i < k,更新(i 加 1),執行以下操作:
ret := ret + arr[i]
返回 ret
我們看看以下實現以更好地理解 -
示例
#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
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
安卓
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP