大家好呀,我是残念,希望在你看完之后,能对你有所帮助,有什么不足请指正!共同学习交流哦(不能私学,谁私学谁是)
本文由:残念ing原创CSDN首发,如需要转载请通知
个人主页:残念ing-CSDN博客,欢迎各位→点赞👍 + 收藏⭐️ + 留言📝
📣系列专栏:残念ing 的C++进阶系列专栏——CSDN博客
前K个高频单词
class Solution {
public:class Compare{public:// 在set中进行排序时的比较规则bool operator()(const pair<string, int>& left, constpair<string, int>& right){return left.second > right.second;}};vector<string> topKFrequent(vector<string>& words, int k){// 用<单词,单词出现次数>构建键值对,然后将vector中的单词放进去,统计每个单词出现的次数map<string, int> m;for (size_t i = 0; i < words.size(); ++i)++(m[words[i]]);// 将单词按照其出现次数进行排序,出现相同次数的单词集中在一块multiset<pair<string, int>, Compare> ms(m.begin(), m.end());// 将相同次数的单词放在set中,然后再放到vector中set<string> s;size_t count = 0; // 统计相同次数单词的个数size_t leftCount = k;vector<string> ret;for (auto& e : ms){if (!s.empty()){// 相同次数的单词已经全部放到set中if (count != e.second){if (s.size() < leftCount){ret.insert(ret.end(), s.begin(), s.end());leftCount -= s.size();s.clear();}else{break;}}}count = e.second;s.insert(e.first);}for (auto& e : s){if (0 == leftCount)break;ret.push_back(e);leftCount--;}return ret;}
};
两个数组的交集
class Solution {
public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {// 先去重set<int> s1;for (auto e : nums1){s1.insert(e);}set<int> s2;for (auto e : nums2){s2.insert(e);}// set排过序,依次比较,小的一定不是交集,相等的是交集auto it1 = s1.begin();auto it2 = s2.begin();vector<int> ret;while (it1 != s1.end() && it2 != s2.end()){if (*it1 < *it2){it1++;}else if (*it2 < *it1){it2++;}else{ret.push_back(*it1);it1++;it2++;}}return ret;}
};