217.存在重复元素
给你一个整数数组 nums
。如果任一值在数组中出现 至少两次,返回 true
;如果数组中每个元素互不相同,返回 false
。
示例 1:
输入:nums = [1,2,3,1]
输出:true
示例 2:
输入:nums = [1,2,3,4]
输出:false
示例 3:
输入:nums = [1,1,1,3,3,4,3,2,4,2]
输出:true
提示:
1 <= nums.length <= 10^5
-10^9 <= nums[i] <= 10^9
解题
思路一
对于数组中每个元素,我们将它插入到哈希表中。如果插入一个元素时发现该元素已经存在于哈希表中,则说明存在重复的元素。
时间复杂度:
O
(
n
)
O(n)
O(n)
空间复杂度:
O
(
n
)
O(n)
O(n)
代码:
// 函数:检查数组中是否包含重复元素
bool containsDuplicate(vector<int>& nums) {
// 创建一个无序映射来存储每个元素的出现频率
unordered_map<int, int> map;
// 遍历输入数组
for (int num : nums) {
// 检查当前元素是否已经在映射中
if (map.find(num) != map.end()) {
// 如果找到,表示存在重复元素,返回 true
return true;
} else {
// 如果未找到,将元素添加到映射中,出现频率设为 1
map[num] = 1;
}
}
// 如果遍历完整个数组后未发现重复元素,则返回 false
return false;
}
思路二
使用集合set来解决,把所有的数字添加到集合中,最后判断数组中的元素个数和集合中的元素个数是否相等。
时间复杂度:
O
(
n
)
O(n)
O(n)
空间复杂度:
O
(
n
)
O(n)
O(n)
代码:
// 判断给定的整数数组中是否存在重复元素
bool containsDuplicate(vector<int>& nums) {
unordered_set<int> set; // 使用无序集合来存储元素,不保留重复值
// 遍历数组中的每个元素
for(int num : nums) {
set.insert(num); // 将元素插入集合中
}
// 比较无序集合的大小和数组的大小,若不相等则表示存在重复元素
if(set.size() != nums.size()) {
return true; // 存在重复元素,返回 true
} else {
return false; // 不存在重复元素,返回 false
}
}