面试题03. 数组中重复的数字
找出数组中重复的数字。
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
示例 1:
输入:
[2, 3, 1, 0, 2, 5, 3]
输出:2 或 3
限制:2 <= n <= 100000
题解思路
长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内,说明每个元素都有相应的数组下标对应,是多对一(数组元素对数组下标)的关系,因为数组元素是可重复的,而数组下标是唯一。
那么,我们可以对数组下标进行标记,当一个数组下标对应的数字出现时,我们就把这个数组下标进行标记,表示该下标相等的数组元素出现过,用一个bool数组进行01标记即可。当遍历后面的数组元素,再次检测到某一下标已经被标记了,则说明该下标对应相等的数组元素曾经出现过,即重复了,返回即可。
代码
class Solution {
public:
int findRepeatNumber(vector<int>& nums)
{
int len = nums.size();
bool flg[len];
memset(flg, false, len);
for(int i=0; i<len; i++)
{
if(flg[nums[i]] == true)
return nums[i];
else
flg[nums[i]] = true;
}
return -1;
}
};