剑指 Offer 03 数组中重复的数字(简单)

找出数组中重复的数字。

在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。

示例 1:
输入:
[2, 3, 1, 0, 2, 5, 3]
输出:2 或 3

限制:
2 <= n <= 100000

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


自己的解法1:建立一个哈希表,牺牲空间,存储每个数字出现过的次数,一旦某个数字出现多于一次,即跳出循环,返回该数字。时间复杂度 O(n)。

class Solution {
public:
    int findRepeatNumber(vector<int>& nums) {
        int len = nums.size();
        vector<int> flag(len, 0);
        int res = 0;
        for(int i = 0; i < len; ++i)
        {
            if(flag[nums[i]] > 0)
            {
                res = nums[i];
                break;
            }
            else
            {
                flag[nums[i]] += 1;
            }
        }
        return res;
    }
};

执行用时:80 ms, 在所有 C++ 提交中击败了92.51%的用户
内存消耗:23.2 MB, 在所有 C++ 提交中击败了42.89%的用户
优点:时间复杂度相对低
缺点:占用内存大


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。