题目描述:
给定一个整数数组,查找数组是否包含任何重复项
如果数组中任何值至少出现两次,则函数应返回true,如果每个元素都不相同,则返回false
Example1
Input: [1,2,3,1]
Output: true
Example2
Input: [1,2,3,4]
Output: false
Example3
Input: [1,1,1,3,3,4,3,2,4,2]
Output: true
C++输入格式
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
}
};
范例一
利用C++中的STL中的容器set
begin() 返回set容器的第一个元素
end() 返回set容器的最后一个元素
size() 返回当前set容器的元素个数
set作为一个容器用来存储同一数据类型的数据能从一个数据集合中取出数据,set中每个元素值都是唯一并且系统能根据元素的值自动进行排序。所以如果用set存储数据的长度小于vector数组的长度说明有重复元素存在,返回0即false
子函数
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
return nums.size() > set<int>(nums.begin(), nums.end()).size();
}
};
主函数
#include <set>
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> vec;
bool m;
int i=0;
int a[10]={0,1,2,3,4,8};
for(i=0;i<6;i++)
{
vec.push_back(a[i]);
}
vector<int>::iterator pos;
//声明一个迭代器,来访问vector容器。作用:遍历或指向vector容器的元素
cout<<"输入数组:";
for(pos = vec.begin();pos!=vec.end();pos++)
{
cout<<*pos<<" ";
}
cout<<endl;
Solution sol;
m = sol.containsDuplicate(vec);
cout<<m<<" "<<endl;
cout<<endl;
return 0;
}
范例二
先对数组进行排序,然后找是否存在两个相邻的数相等,若相等返回true否则返回false
用到sort()函数进行排序
子函数
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
sort(nums.begin(), nums.end());
for (int i=0; i<int(nums.size())-1; i++) {
if (nums[i]==nums[i+1])
return true;
}
return false;
}
};
主函数
#include <set>
#include <iostream>
#include <vector>
#include <algorithm> //用到自带排序算法sort()
using namespace std;
同上