题解 | #字符串出现次数的TopK问题#

字符串出现次数的TopK问题

http://www.nowcoder.com/practice/fd711bdfa0e840b381d7e1b82183b3ee

using psi = pair<string, int>;
// 自定义大顶堆
struct cmp {
  bool operator()(const psi& p1, const psi& p2) {
    if (p1.second != p2.second) return p1.second < p2.second;
    return p1.first > p2.first;
  }
};

vector<vector<string> > topKstrings(vector<string>& strings, int k) {
  vector<vector<string> > ans;
  int len = strings.size();
  if (len == 0) return ans;

  unordered_map<string, int> umap;
  for (const auto& s : strings) {
    ++umap[s];
  }
  priority_queue<psi, vector<psi>, cmp> pque(umap.begin(), umap.end());
  // 取大顶堆前k元素
  while (k-- && !pque.empty()) {
    auto tmp = pque.top();
    pque.pop();
    ans.emplace_back(vector<string>{ tmp.first, to_string(tmp.second) });
  }
  return ans;
}

int main() {
  vector<string> vec{ "123","123","231","32" };
  auto ans = topKstrings(vec, 2);
  return 0;
}
全部评论

相关推荐

点赞 1 评论
分享
牛客网
牛客企业服务