题目描述:
Given an integer array nums, return true if any value appears at least twice in the array, and return false if every element is distinct.
限制条件:
1 <= nums.length <= 105
-109 <= nums[i] <= 109
链接:跳转至题目
示例:
Input: nums = [1,2,3,1]
Output: true
Input: nums = [1,2,3,4]
Output: false
问题分析:
由题目得,给定一个整数数组,若数组内有一个整数至少出现两次(有重复),则输出true;若每个整数仅出现一次,则输出false。实际上就是查找数组内的重复元素。
解题方法:
1.记录取值范围内所有数值的出现次数
即开辟一个数组count,数组长度为取值范围中的整数个数。
已知条件中包括 “-109 <= nums[i] <= 109”, 可见开辟数组所耗费的储存空间较小,因此可以采用该种方法。
创建数组后,遍历数组nums中的每个元素,并统计其出现次数。若在遍历过程中,当前元素的出现次数等于二,则输出true,结束运行;若直到遍历结束都未出现上述情况,则输出false。
代码实现:
#include<iostream>
#include<vector>
#define N 219
using namespace std;
int main()
{
vector<int> nums;
//初始化数组
cout << "Enter the length of nums:" << endl;
int length;
cin >> length;
cout << "Enter each integer:" << endl;
for (int i=0; i<length;++i) {
int t;
cin >> t;
nums.push_back(t);
}
//创建count数组
int *count = new int [N];
for (int i=0;i<N;++i) {
count[i] = 0;
}
//统计出现个数
for (int i=0;i<nums.size();++i) {
count[nums[i]]++;
if (count[nums[i]] > 1) {
cout << "true";
return 0;
}
}
cout << "false";
return 0;
}
2.先排序,后比较相邻元素是否相同
通过排序可以使重复的元素相邻,因此只要两两比较数组中的所有元素,便可以发现重复元素。
代码实现:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
vector<int> nums;
//初始化数组
cout << "Enter the length of nums:" << endl;
int length;
cin >> length;
cout << "Enter each integer:" << endl;
for (int i=0; i<length;++i) {
int t;
cin >> t;
nums.push_back(t);
}
//使用algorithm库中的函数sort()对nums进行排序
sort(nums.begin(),nums.end());
//两两比较相邻元素
for (int i=0;i<nums.size()-1;++i) {
if (nums[i] == nums[i+1]) {
cout << "true";
return 0;
}
}
cout << "false";
return 0;
}