原题描述
第一种能够想到的方法就是暴力求解了吧,只需要对原数组排序一次,通过比较前后两个值就能确定重复的数字
class Solution {
public:
int findRepeatNumber(vector<int>& nums) {
int size = nums.size();
sort(nums.begin(), nums.begin() + size);
for(int i = 0; i < size; i++)
{
if(nums[i] == nums[i + 1])
{
return nums[i];
}
}
return -1;
}
};
时间复制度:O(n * logn + n)
空间复杂度:O(1)
这里博主介绍一种比较妙的解题思路,在原数组上交换值通过遍历的方式来找出重复的元素
时间复杂度:O(N)
空间复杂度:O(1)
class Solution {
public:
int findRepeatNumber(vector<int>& nums) {
for(int i = 0; i < nums.size(); i++)
{
while(i != nums[i])
{
if(nums[i] == nums[nums[i]])
{
return nums[i];
}
//如果索引位置处的值i不等于该索引下标的元素值nums[i],那就将该位置的值与元素值所对应的位置处交换
int tmp = nums[nums[i]];
nums[nums[i]] = nums[i];
nums[i] = tmp;
}
}
return -1;
}
};