这道题当时比赛时没写出来,一直报编译错误,还以为是vector二维数组没有开辟大小导致的,后来结束发现是for循环的时候>写成了>=导致数组越界了,这个细节当时没有发现,有点可惜。
- class Solution {
- public:
- vector
> mostPopularCreator(vector& cr, vector& ids, vector<int>& views) { - unordered_map
long long> sum,vs; - unordered_map
mxv; - long long maxV = 0;
-
- for (int i = 0; i
size(); i ++) { - sum[cr[i]] += (long long)views[i];
- maxV = max(sum[cr[i]], maxV);
- if (!vs.count(cr[i]) || views[i] > vs[cr[i]] || (views[i] == vs[cr[i]] && ids[i] < mxv[cr[i]])) {
- mxv[cr[i]] = ids[i], vs[cr[i]] = views[i];
- }
- }
- vector
> res; - for (auto &p : sum)
- if (p.second == maxV)
- res.push_back({p.first, mxv[p.first]});
- return res;
- }
- };
补题的时候也学到了很多新东西。(我要狠狠吐槽一下csdn这个撤销的操作!!气死了,这篇文章些都快写完了,然后写错了个东西我快捷键撤销一下直接给我撤没了还回不去!!!)
1.map和unordered_map的区别
在
unordered_map
内部,使用的Hash Table
对数据进行组织,通过把键值key
映射到hash
表中的一个位置进行访问,根据hash
函数的特点,unordered_map
对于元素查找的时间复杂度可以达到O(1)
,但是,它的元素排列是无序的。
unordered_map
元素无序,查询快,遍历慢。
在
map
的内部,使用了「红黑树」(red-black tree
)来组织数据,因此默认的就已经实现了数据的排序。不过,在存储上
map
却比较占用空间,因为在红黑树中,每一个节点都要额外保存父节点和子节点的连接,因此使得每一个节点都占用较大空间来维护红黑树性质。
map元素有序,占空间。
详见
map和unordered_map的区别 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/210458185
2.增强for循环map键值对
其中sum是map
对auto的理解:
3.map调用key和value的简便方法
我们看到的p.first和p.second指的就是map中键值对的key和value,非常方便,map也可以这样子使用。