这题我想到了三种方法 , 方法一用set存储,利用set有序不重复的特点,看每次set的元素个数是否变化,如果不变则是有重复。
执行用时 : 112 ms, 在Contains Duplicate的C++提交中击败了10.21% 的用户
内存消耗 : 16.6 MB, 在Contains Duplicate的C++提交中击败了0.92% 的用户
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
set<int>flag;
int s = flag.size();
for( int i = 0 ; i < nums.size() ; i++ ){
flag.insert(nums[i]);
if( s == flag.size() ) return true;
else s = flag.size();
}
return false;
}
};
方法二就是排序,然后遍历nums,看是否从1开始,每一个数都和前一个数相等。
执行用时 : 48 ms, 在Contains Duplicate的C++提交中击败了20.03% 的用户
内存消耗 : 11.3 MB, 在Contains Duplicate的C++提交中击败了0.92% 的用户
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
sort( nums.begin() , nums.end() );
for( int i = 1 ; i < nums.size() ; i++ ){
if( nums[i] == nums[ i - 1 ] ) return true;
}
return false;
}
};
第三种就是直接遍历数组,用map标记是否出现过,map的查找时间是log(n),感觉都差不多,这个我就没有写代码测试了。