思路:
**方法一:**可以使用辅助的数据结构,如unordered_map,set等STL.
时间复杂度:O(N) 空间复杂度O(N)
代码实现:
// 方法一: 使用 辅助的数据结构,如map或者set 空间复杂度O(N)
set<int> st;
for(auto num : nums ){
if( st.find(num) == st.end() )
st.insert(num);
else
return num;
}
return -1;
**方法二:**由于数组中的数字都在0-n-1范围,所以可以创建一个数组,元素全都初始化为0, 下标遍历到对应位置时,如果其中元素为0,则将该位置的元素置1,否则返回该元素的下标
时间复杂度O(N) 空间复杂度:
代码实现:
vector<int> arr(nums.size(),0);
for( int i= 0;i<nums.size();i++ ){
if( !arr[nums[i]] )
arr[nums[i]] = 1;
else
return nums[i];
}
return -1;
**方法三:**原地交换 用元素索引
代码实现:
int temp = 0;
for ( int i = 0; i< nums.size(); i++ ){
while( nums[i] != i ){
if( nums[nums[i]] == nums[i] )
return nums[i];
else
{
// 交换
temp = nums[nums[i]];
nums[nums[i]] = nums[i];
nums[i] = temp;
}
}
}
return -1;

被折叠的 条评论
为什么被折叠?



