难度: e a s y \color{Green}{easy} easy
本题和 剑指 Offer 03. 数组中重复的数字 类似。
题目描述
给你一个整数数组 n u m s nums nums 。如果任一值在数组中出现 至少两次 ,返回 t r u e true true ;如果数组中每个元素互不相同,返回 f a l s e false 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 < = n u m s . l e n g t h < = 1 0 5 1 <= nums.length <= 10^{5} 1<=nums.length<=105
- − 1 0 9 < = n u m s [ i ] < = 1 0 9 -10^{9} <= nums[i] <= 10^{9} −109<=nums[i]<=109
算法
(哈希表)
- 建议一个哈希表
unordered_map
- 遍历数组
nums
中的每个数字num
:如果num
在哈希表中表示重复,返回true
。 否则把num
添加到哈希表中 - 没有答案就返回
false
时间复杂度
遍历数组使用
O
(
N
)
O(N)
O(N) ,哈希表 unordered_map
添加与查找元素皆为
O
(
1
)
O(1)
O(1)
空间复杂度
哈希表 unordered_map
占用
O
(
N
)
O(N)
O(N) 大小的额外空间。
C++ 代码
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
unordered_map<int, bool> hash;
for (auto num : nums) {
if (hash[num] == true) return true;
hash[num] = true;
}
return false;
}
};