题解 | #数组中重复的数字#
数组中重复的数字
http://www.nowcoder.com/practice/6fe361ede7e54db1b84adc81d09d8524
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param numbers int整型vector
* @return int整型
*/
int duplicate(vector<int>& n) {
if(n.size()==0)
return -1;
// sort(n.begin(),n.end());
// for(int i=0;i<n.size()-1;i++)
// {
// if(n[i]==n[i+1])
// return n[i];
// }
// return -1;
// }
///////////////////////////////////////////第二种///////////////
// set<int> s;
// for(int i=0;i<n.size();i++)
// {
// if(s.find(n[i])==s.end())
// s.insert(n[i]);
// else
// return n[i];
// }
// return -1;
//////////////////////第三种////////////
for(int i =0;i<n.size();++i)
{
while(n[i]!=i)
{
if(n[i]==n[n[i]])
return n[i];
else
swap(n[i],n[n[i]]);
}
}
return -1;
}
};
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param numbers int整型vector
* @return int整型
*/
int duplicate(vector<int>& n) {
if(n.size()==0)
return -1;
// sort(n.begin(),n.end());
// for(int i=0;i<n.size()-1;i++)
// {
// if(n[i]==n[i+1])
// return n[i];
// }
// return -1;
// }
///////////////////////////////////////////第二种///////////////
// set<int> s;
// for(int i=0;i<n.size();i++)
// {
// if(s.find(n[i])==s.end())
// s.insert(n[i]);
// else
// return n[i];
// }
// return -1;
//////////////////////第三种////////////
for(int i =0;i<n.size();++i)
{
while(n[i]!=i)
{
if(n[i]==n[n[i]])
return n[i];
else
swap(n[i],n[n[i]]);
}
}
return -1;
}
};