【问题标题】:Finding k-th biggest element in set查找集合中的第 k 个最大元素
【发布时间】:2014-10-22 22:35:53
【问题描述】:

我在 C++ 中使用 set

set<int> Set;

我想k-最大的元素。怎么做? 请帮我一把,

【问题讨论】:

  • 如果您提供代码并表明您至少完成了一些自己的研究,那么您将在 SO 上获得更多运气。
  • 请尝试寻找解决方案。它不需要是正确的,但我们需要您付出一些努力来帮助我们回答您需要帮助的地方。
  • 这不是重复的——找到最大的元素和找到第K个元素是不同的。

标签: c++


【解决方案1】:

使用 std::set 不可能在 O(log n) 时间内完成,但您可以使用扩展 STL 中的 tree 来完成。使用方法如下:

#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> s;
s.insert(x);
s.erase(x);
s.count(x);
s.find_by_order(k);
// k-th biggest element in set
s.order_of_key(x);
// how many elements in set are less than x

【讨论】:

    【解决方案2】:

    集合中的元素按排序顺序存储,因此Set.rbegin() 产生一个指向集合中最大元素的迭代器。

    std::next 将使迭代器前进指定数量的位置,并将迭代器返回到该位置。

    您可以将它们组合起来以获取最大项目的迭代器,然后将其向前推进 K 个元素,以获取 Kth 最大元素的迭代器,然后取消引用以获取元素本身.

    【讨论】:

      猜你喜欢
      • 2014-07-21
      • 1970-01-01
      • 1970-01-01
      • 2021-08-29
      • 2015-10-06
      • 2021-08-29
      • 1970-01-01
      • 2019-08-13
      相关资源
      最近更新 更多