数组中第 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
是最右边的索引。
l
和 r
都是 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
我正在编写此代码以查找数组中的第 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
是最右边的索引。l
和r
都是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