LeetCode 面试题03. 数组中重复的数字

面试题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;
    }
};
发布了23 篇原创文章 · 获赞 13 · 访问量 2996

猜你喜欢

转载自blog.csdn.net/qq_29856169/article/details/104403758