0217. Contains Duplicate - chasel2361/leetcode GitHub Wiki
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.
Example 1:
Input: nums = [1,2,3,1]
Output: true
Example 2:
Input: nums = [1,2,3,4]
Output: false
Example 3:
Input: nums = [1,1,1,3,3,4,3,2,4,2]
Output: true
Constraints:
1 <= nums.length <= 10^5
-10^9 <= nums[i] <= 10^9
這題我一開始很直覺地想用 Counter 來解,程式碼如下:
from collections import Counter
class Solution:
def containsDuplicate(self, nums: List[int]) -> bool:
cnt = Counter(nums)
if cnt.most_common(1)[0][1] > 1:
return True
return False
這樣解的時間複雜度跟空間複雜度都是 O(N) (因為要把每一個 element 插入 Counter),但看了別人的寫法之後直接笑出來
class Solution:
def containsDuplicate(self, nums: List[int]) -> bool:
return len(nums) > len(set(nums))
直接跟 set 的結果比長度就好了咩,不過有趣的是 leetcode 上的解題速度似乎沒有比較快。
另外 C++ 的解法也很類似,可以用set, map, unordered_set, unorder_map 來解都行,我用 unordered_map 解法如下
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
unordered_map<int, int> numMap;
for(int i=0; i<nums.size(); i++){
numMap[nums[i]]++;
if (numMap[nums[i]] >1) return true;
}
return false;
}
};
由於原理跟 python 的 Counter 解一樣,所以時間複雜度跟空間複雜度都是 O(N)