题目:
给你一个整数数组 nums 。如果任一值在数组中出现至少两次 ,返回 true;如果数组中每个元素互不相同,返回 false 。
示例 1:
输入:nums = [1,2,3,1]
输出:true
示例 2:
输入:nums = [1,2,3,4]
输出:false
代码实现:
class Solution {
public:
bool cmp(int i,int j)
{
return i<j;
}
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;
}
};
思路很简单:先排序,对排序后的元素前后进行比较即可。
这里主要对C++自带的sort排序函数的使用作一些介绍:
- 使用必须包含头文件
#include <algorithm>
using namespace std;
- 如果是对vector类型数据排序,假设定义的vector变量为
vector <Type> num
,则如下:
//cmp是自定义的比较器(判断函数)
sort(num.begin(), num.end(), cmp)
- 如果是对array类型数据排序,假设a表示要排序的数组,含n个元素,则如下:
//cmp是自定义的比较器(判断函数)
sort(a,a+n,cmp);
下面的代码是一个简单的测试:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool cmp(int i, int j)
{
return i > j;
}
int main() {
//array元素排序
int nums[] = {1,5,2,3};
sort(nums, nums+4, cmp);
cout << "--------------" << endl;
for (int i = 0; i < sizeof(nums)/sizeof(nums[0]); i++) {
cout << nums[i] << endl;
}
cout << "--------------" << endl;
//vector元素排序
vector<int> nums1 = { 1,5,2,3 };
sort(nums1.begin(), nums1.end(), cmp);
cout << "--------------" << endl;
for (int i = 0; i < nums1.size(); i++) {
cout << nums1[i] << endl;
}
cout << "--------------" << endl;
system("pause");
return 0;
}
这里的cmp函数就是自定义的比较器,即将对应的元素按从大到小的顺序进行排序。
输出的结果为:
--------------
5
3
2
1
--------------
--------------
5
3
2
1
--------------
( C++竟然没有现成的获取数组长度的函数,还得用sizeof(arr) / sizeof(arr[0])
)