我想订购一堆可能有重复的东西。例如:
int values[5] = {4, 5, 2, 5, -1};
int expected[5] = {1, 2, 0, 2, -1};
这里2是最小的元素,因此其顺序为0。4是第二个最小的元素,因此其顺序为1。5是最小的第三元素,我希望它们两个都具有2的顺序。我想跳过某些元素(-1表示上面的示例),因此这些元素的阶数为-1。
如何在C ++中做到这一点或描述算法?
谢谢
只需对数组进行排序,然后为每个元素分配其等级:
vector<int> v(values, values + 5);
v.push_back(-1);
sort(begin(v), end(v));
v.resize(unique(begin(v), end(v)) - begin(v));
for (int i = 0; i < 5; ++i)
expected[i] = lower_bound(begin(v), end(v), values[i]) - begin(v) - 1;
假定所有元素均为非负数或-1。如果负元素小于-1,则需要对-1进行特殊处理。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句