题目中要求时间复杂度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;
}
};