📌  相关文章
📜  使用 STL 的第 K 个最小/最大元素

📅  最后修改于: 2022-05-13 01:57:50.345000             🧑  作者: Mango

使用 STL 的第 K 个最小/最大元素

给定一个数组和一个数字 k,其中 k 小于数组的大小,我们需要找到给定数组中第 k 个最小的元素。

例子:

Input : arr[] = {7, 10, 4, 3, 20, 15}
            k = 2
Output : 4
Smallest element is 3. Second smallest
is 4.

Input : arr[] = {7, 10, 4, 3, 3, 15}
            k = 2
Output : 4
Even if there are more than one occurrences
of 3, answer should be 4.

Input :arr[] = {7, 10, 4, 3, 20, 15}
          k = 4
Output : 10

我们在 C++ STL 中使用 set。
1) 将所有元素插入一个集合。
2)遍历集合并打印第k个元素。

// STL based C++ program to find k-th smallest
// element.
#include 
using namespace std;
  
int kthSmallest(int arr[], int n, int k)
{
    // Insert all elements into the set
    set s;
    for (int i = 0; i < n; i++)
        s.insert(arr[i]);
  
    // Traverse set and print k-th element
    auto it = s.begin();
    for (int i = 0; i < k - 1; i++)
        it++;
    return *it;
}
  
int main()
{
    int arr[] = { 12, 3, 5, 7, 3, 19 };
    int n = sizeof(arr) / sizeof(arr[0]), k = 2;
    cout << "K'th smallest element is "
         << kthSmallest(arr, n, k);
    return 0;
}

输出:

K'th smallest element is 5 

上述解决方案的时间复杂度为 O(n Log n)。请注意,STL 中的 set 在内部使用自平衡 BST,因此搜索和插入操作的时间复杂度为 O(log n)。

相关文章 :

未排序数组中的第 K 个最小/最大元素 |设置 1
未排序数组中的第 K 个最小/最大元素 |第 2 组(预期线性时间
未排序数组中的第 K 个最小/最大元素 |第 3 组(最坏情况线性时间)