[C++] Leetcode 217. Contains Duplicate (Hint, Solution)

Problem

https://leetcode.com/problems/contains-duplicate

 

Contains Duplicate - LeetCode

Can you solve this real interview question? Contains Duplicate - 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 Ex

leetcode.com

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 <= 105
  • -109 <= nums[i] <= 109
 

 

 

Hint

Try use C++ STL library.

 

 

 

Solution

1. Brute Force
2. Sort the array
3. Use Set
4. Use Map
  4-1. Map
  4-2. Unordered Map

 

 

 

Code

I use unordered map.

Simple

class Solution {
public:
    bool containsDuplicate(vector<int>& nums) {
        unordered_map<int, bool> visited;

        for (int i=0; i<nums.size(); i++) {
            int n = nums[i];
            if (visited[n])
                return true;
            visited[n] = true;
        }

        return false;
    }
};

 

Whole Code with Test Case

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int answer = 0;
        int len = prices.size();
        int minPrice = prices[0];

        for (int i=0; i<len; i++) {
            int current = prices[i];
            int currentProfit = current - minPrice;
            
            if (answer < currentProfit) {
                answer = currentProfit;
            }
            if (minPrice > current) {
                minPrice = current;
            }
        }

        return answer;
    }
};

 

 

 

Complexity

Time

1. Brute Force: O(n^2)
2. Sort the array: O(n*log n)
3. Use Set: n*{O(log n) + Rebalance}
4. Use Map
  4-1. Map: n*{O(log n) + Rebalance}
  4-2. Unordered Map: 2*n*O(1 for average n for worst)

Time complexity will be O(n*1 for avg n for worst).

 

Space

1. Brute Force: O(1)
2. Sort the array: O(1)
3. Use Set: O(n)
4. Use Map
  4-1. Map: O(n)
  4-2. Unordered Map: O(n)

Space complexity will be O(n).

 

 

 

Best Solution

Time Efficiency

class Solution {
public:
    bool containsDuplicate(vector<int>& nums) {
        sort(nums.begin(), nums.end());
        for(int i = 1; i < nums.size(); i++)
        {
            if(nums[i-1] == nums[i])
                return true;
        }
        return false;
    }
};

 

Space Efficiency

class Solution {
public:
    bool containsDuplicate(vector<int>& nums) {
        sort(nums.begin(),nums.end());

        for(int i = 1; i <= nums.size()-1; i++) {
            if(nums[i-1]==nums[i]) {
                return true;
            }
        }
        return false;
    }
};

 

 

 

Overall