数组中重复的数字
思路总结 :
最直接肯定是如果我们能都将数组排序 那么只要从头到尾遍历一次即可 看相邻元素是否相等 然而最快的排序算法时间复杂度都是 nlogn的。
这里有一种时间复杂度为o(n, 空间复杂度为o(1)的算法
class Solution {
public:
int duplicateInArray(vector<int>& nums) {
int n=nums.size();
for(int i=0;i<n;i++) //满足题目的如果不在0-n-1 返回 -1;
{
if(nums[i]<0||nums[i]>=n)
return -1;
}
for(int i=0;i<n;i++)
{
if(nums[i]!=i||nums[nums[i]]!=nums[i]) // 图片情况一
swap(nums[i],nums[nums[i]]);
if(nums[i]!=i&&nums[nums[i]]==nums[i]) //图片情况二
return nums[i];
}
return -1; //没有相同元素 返回-1
}
};