题目描述
找出数组中重复的数字
算法1
思路:一个萝卜一个坑,萝卜编号与坑编号不对应,就是它
1.对应编号;
2.找出编号不对应的;
参考文献
acwing 剑指offer
C++ 代码
class Solution {
public:
int duplicateInArray(vector<int>& nums) {
//边界情况
int n = nums.size();
for (auto x : nums)
if (x < 0 || x > n - 1) return -1;
// 一个萝卜一个坑,萝卜编号与坑编号不对应,就是它
for (int i = 0; i < n; i ++)
{
while (i != nums[i] && nums[nums[i]] != nums[i]) swap(nums[i], nums[nums[i]]);//对应编号;
if (i != nums[i] && nums[nums[i]] == nums[i]) return nums[i];//找出编号不对应的;
}
return -1;
}
};