【发布时间】:2013-10-17 23:39:27
【问题描述】:
我正在尝试编写一个返回向量中第 k 个最小元素的代码。 例如: 假设您有一个包含元素 {0, 3, 2, 5} 的向量 rand 用户输入 2 作为 K 的值。 然后该函数应从向量中返回元素 2,因为它是向量中的第二(第 k)个最小元素。
到目前为止,这是我的代码:
int iterative_kth_element(vector<int>& vec, size_t k)
{
int index = 0;
int min = vec[0];
for(int i = k;i<vec.size();i--) {
for (int j = 1; j < vec.size();j++) {
if ( min > vec[j] ) {
min = vec[j];
index = i;
}
vec.erase(vec.begin() + index);
if (i == 1) {
return min;
}
}
}
}
它不断返回一些甚至不在向量中的巨大数字。
【问题讨论】:
-
除非你真的需要做其他事情(例如,这是家庭作业)使用
std::nth_element。 -
实际上对向量进行排序并从前面返回第 k 个元素可能是一种更快的方法,除非你真的想迭代地解决它
-
是的,我必须用未排序的向量来做
-
你不能只为 min 存储 1 个值。您需要存储 k 个最小的项目并在对向量进行 1 次迭代时维护此信息数组/列表。一次迭代后,返回 k 个项目中最大的一个。