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
'알고리즘 문제 > Leetcode' 카테고리의 다른 글
[C++] Leetcode 23. Merge k Sorted Lists (Hint, Solution) (0) | 2023.04.19 |
---|---|
[C++] Leetcode 73. Set Matrix Zeroes (Hint, Solution) (0) | 2023.04.07 |
[C++] Leetcode 322. Coin Change (Hint, Solution) (0) | 2023.03.30 |
[C++] Leetcode 70. Climbing Stairs (Hint, Solution) (0) | 2023.03.29 |
[C++] Leetcode 121. Best time to but and sell stock (Hint, Solution) (0) | 2023.03.23 |