做题的时候有种感觉,就是同样一道题目,用C++的STL要比用C、java更容易一些,所以,很多用C++能轻松搞定的问题,换成了C和java还真得费一番功夫。
这里给出C++的两种做法,
一种是先排序,再相邻两两判断是否相等。含有重复数字的数组,经过排序后,必定由相邻两个数字是一样的。
第二种是用STL的集合Set,因为Set的元素是不能重复的,所以我们就先读数组里面的数字,一个一个放到Set里,当一个新读到的数字被Set找到的时候,就说明已经出现了重复。
(1)C++代码解法一:
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;
}
};
(2)C++代码解法二:
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
set<int> S;
for(int i=0;i<nums.size();i++){
if(S.find(nums[i])==S.end()){
S.insert(nums[i]);
}
else
return true;
}
return false;
}
};
C和java的实现算法暂时采用的是最笨的两个for循环,但是这样就出现了一个问题,就是出现了time limit exceeded 超时的现象,所以java和C语言的实现暂时还在考虑中。