判断数组是否存在重复元素

假设数组有n个元素,元素取值范围为1~n,如何判断数组是否存在重复元素

将每个元素放到他所应该在的地方。如果在放得时候发现他的坑已经被占了,那么出现重复元素 


bool judgRepeatedElement(vector<int> v){
int j = -1;
for (int i = 0; i < v.size(); i++){
j = v[i];
if (i == j-1) // 放对位置
continue;
if (j == v[j-1]) // 坑已经被占,说明有重复
return true;
v[i] = v[j-1]; // 先将v[j-1]交换
v[j-1] = j; // 将j放到v[j-1]处
i--; // 因为v[i]是新的值,所以需要再处理下
}
return false;
}
 
原文地址:https://www.cnblogs.com/yxzfscg/p/4782125.html