Leetcode-217存在重复数组
对一个数组nums进行从小到大排序:sort(nums.begin(),nums.end())
cpp解法1:排序,用的STL的sort函数
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
sort(nums.begin(),nums.end());
for(int i=0;i<nums.size()-1;i++){
if(nums[i]==nums[i+1])
return true;
}
return false;
}
};
复杂度:
时间复杂度:O(NlogN),其中 N为数组的长度。需要对数组进行排序。 空间复杂度:O(logN),其中 N 为数组的长度。注意我们在这里应当考虑递归调用栈的深度。
cpp解法2:哈希表
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
unordered_set<int> s;
for(int x:nums){
if(s.find(x)!=s.end()){
return true;
}
s.insert(x);
}
return false;
}
};
解析:
for(int x:nums) C++11引入的一个更简单的for循环语句,用于遍历序列的所有元素 语法形式:
for(数据类型 变量 : 序列)
循环语句
序列 可以是花括号括起来的初始值列表、数组、vector、string,这些类型的特点是拥有能返回迭代器的 begin 和 end成员 数据类型:变量 序列中的每个元素都能转换成该变量的类型,最简单的方法是使用auto类型说明符。 若需要对序列中的元素进行写操作,则需要声明成引用类型&。 对vector对象中元素进行翻倍
vector<int>v={0,1,2,3,4};
for(auto &r : v)
r*= 2;
vector<int>v={0,1,2,3,4};
for(int i=0; i<v.size(); i++){
v[i]*=2;
}
for(auto beg= v.begin(), end= v.end(); beg!= end; ++beg){
auto &r= *beg;
r*= 2;
}
正向查找find(): s.find(str) string中find()返回值是字母在母串中的下标位置。 如果没有找到,那么会返回一个特别的标记npos,一般写作string::npos
s.find()查找 s.end()查找到最后 s.insert()插入值
JAVA暴力:超时了。。。
class Solution {
public boolean containsDuplicate(int[] nums) {
for(int i=0;i<=nums.length-1;i++){
for(int j=i+1;j<nums.length;j++){
if(nums[i]==nums[j])
return true;
continue;
}
}
return false;
}
}
|