03数组中重复的数字

描述

在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组[2,3,1,0,2,5,3],那么对应的输出是2或者3。存在不合法的输入的话输出-1

数据范围:
0≤n≤10000
进阶:时间复杂度O(n) ,空间复杂度O(n)
示例1:
输入:[2,3,1,0,2,5,3]
返回值:2
说明:2或3都是对的

方法1:
采容器,对容器中的元素进行排序,然后判断是否有重复的数字。
时间复杂度O(nlogn)

    int duplicate(vector<int>& numbers) {
        // write code here
        sort(numbers.begin(), numbers.end());
        for(int i =0; i<numbers.size(); i++)
        {
            if(numbers[i] == numbers[i+1])
                return numbers[i];
        }
        return -1;
    }

方法2:
采用set容器,创建一个set容器,在数组中找set末尾元素,如果没找到,就将数组的元素i插入到set容器中,如果找到了,就返回i。
否则就是返回-1。
set是关联式容器,用来存储同一数据类型,且set中的每个元素的值都是唯一的,系统会根据元素的值自动进行排序。
时间复杂度O(n) , 空间复杂度O(n)

    int duplicate(vector<int>& numbers) {
        // write code here
        set<int> s;
        for(int i =0; i<numbers.size(); i++)
        {
            if( s.find(numbers[i]) ==s.end())
                s.insert(numbers[i]);
            else
                return numbers[i];
        }
        return -1;
    }
posted @ 2024-04-09 11:11  蓝色的海嗷  阅读(39)  评论(0)    收藏  举报