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)

⚠️ **GitHub.com Fallback** ⚠️