我正在寻找一种在C++中高效地对数组进行归一化的方法。归一化是指将所有数组值转换为小于或等于n的值。所以这个数组:
5235 223 1000 40 40
变成了:
4 2 3 1 1
或者 3 1 2 0 0
以下是我的代码:
vector<int> normalize_array(vector<int> arr){
vector<int> tmp(arr), ret(arr.size());
sort(tmp.begin(), tmp.end());
for (int i = 0; i < arr.size(); ++i){
vector<int>::iterator iter = find(tmp.begin(), tmp.end(), arr[i]);
ret[i] = std::distance(tmp.begin(), iter);
}
return ret;
}
输出结果为
4 2 3 0 0
,上述代码不能很好地处理重复元素。是否有更好的方法来解决这个问题?
arr
会不必要地产生额外的向量副本。 - oblitum4 2 3 0 0
)。请明确您真正希望进行的转换。 - rici