题目中要求时间复杂度O(n),可知不能使用排序来做。
同时要求空间复杂度为O(n),则可以使用经典的空间换时间方法做。
创建一个与输入数组numbers相同长度的数组count,用于记录numbers中每个数出现了几次。
遍历数组,每遍历一个数就将count中下标为该数的元素++,并判断++后该元素的值。若该值大于1,则说明该数重复,直接返回该数。
若遍历完整个数组都未返回,说明无重复数,返回-1。
时间复杂度与空间复杂度都满足要求。

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param numbers int整型vector 
     * @return int整型
     */
    int duplicate(vector<int>& numbers) {
        // write code here
        if(numbers.size() < 1){
            return -1;
        }
        vector<int> count(numbers.size(),0);
        for(int i = 0;i < numbers.size();i++){
            if(++count.at(numbers.at(i)) > 1){
                return numbers.at(i);
            }
        }
        return -1;
    }
};