繁体   English   中英

数组中第 K 个最小的元素

[英]Kth smallest element in a array

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

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;
    }
};

我尝试在我的代码中使用排序 function 但此代码在我的排序 function 中给出错误,下面给出我不理解的。

prog.cpp: 在成员 function int 解决方案::kthSmallest(int*, int, int, int):

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

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

在 C++ 中,arrays 等arr不是对象,因此它们没有可以使用点运算符访问的类似sort的成员。

相反,请尝试使用<algorithm> header 中的std::sort

#include <algorithm>

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

此示例假设:

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

arrint *类型,因此原始类型和原始类型没有任何成员 function。 所以arr没有任何sort()成员 function,所以会导致错误。

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

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

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

注意:如果你使用 C++ 20 你可以使用std::ranges::nth_element

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM