数组中第 K 个最小的元素

Kth smallest element in a array

我正在编写此代码以查找数组中的第 K 个最小元素,其中 l= 起始索引和 r = 结束索引作为函数中的输入参数提供给我们。

class Solution{
    public:
    int kthSmallest(int arr[], int l, int r, int k) {
        //code here
        arr.sort(l,l+r+1);
        int count =1,i=1,var =0;
        while(count<=k)
        {
            var = arr[i];
            count++;
            i++;
        }
        return var;
    }
};

我试图在我的代码中使用排序函数,但是这段代码在我的排序函数中给出了错误,下面给出了我不理解的错误。

prog.cpp:在成员函数int Solution::kthSmallest(int*, int, int, int):

prog.cpp:18:13: 错误:请求 arr 中的成员排序,非 class 类型 int*

     arr.sort(l,l+r+1);
         ^

在 C++ 中,像 arr 这样的数组不是 objects,所以它们没有像 sort 这样可以使用点运算符访问的成员。

相反,请尝试使用 <algorithm> header:

中的 std::sort
#include <algorithm>

std::sort(arr + l, arr + r + 1);

此示例假设:

  • l 是您要排序的最左边的索引。
  • r 是最右边的索引。
  • lr 都是 arr 的有效索引。

arr是类型int *,所以原始类型和原始类型没有任何成员函数。所以 arr 没有任何 sort() 成员函数,所以会导致错误。

如果要对 arr 进行排序,请使用 std::sort 来自 <algorithm>

std::sort(arr + l, arr + r + 1);

另一种方法是使用std::nth_element算法,如果数组排序,它会给你数组中位置的元素。 要使用它,您需要迭代器,因此如果您不想要堆分配,则必须将 C 数组 arr[] 转换为 std::array,如果您想要更灵活,则必须将 std::vector 转换为 std::vector

Note: if you use C++ 20 you can use std::ranges::nth_element