1
+ /*
2
+ Clarifications
3
+ 1) Is this sorted Array?
4
+ 2) What is the maximum / minimum value in nums?
5
+
6
+ Solutions
7
+ 1) Brute force - two nested for loop
8
+ T(C): O(n^2)
9
+ S(C): O(1)
10
+ 2) Sort - Mergesort or library sort(Merge+quick)
11
+ T(C) : O(NlogN)
12
+ S(C) : O(N)
13
+ 3) Hash
14
+ T(C) : O(1)
15
+ S(C) : O(N)
16
+ */
17
+
18
+ class Solution {
19
+ public:
20
+ // Solution 2-1) Library Sort
21
+ // bool containsDuplicate(vector<int>& nums) {
22
+ // sort(nums.begin(), nums.end());
23
+ // for (size_t i = 0; i < nums.size() - 1; i++)
24
+ // {
25
+ // if (nums[i] == nums[i + 1])
26
+ // return true;
27
+ // }
28
+ // return false;
29
+ // }
30
+
31
+ // Solution 2-2) Implement Sort
32
+ void mergeSort (vector<int >& nums, int start, int end, vector<int >& temp)
33
+ {
34
+ if (start >= end)
35
+ return ;
36
+ int mid = (start + end) / 2 ;
37
+ mergeSort (nums, start, mid, temp);
38
+ mergeSort (nums, mid + 1 , end, temp);
39
+ int i = start, j = mid + 1 , k = start;
40
+ while (i <= mid && j <= end)
41
+ {
42
+ if (nums[i] < nums[j])
43
+ temp[k++] = nums[i++];
44
+ else
45
+ temp[k++] = nums[j++];
46
+ }
47
+ while (i <= mid)
48
+ temp[k++] = nums[i++];
49
+ while (j <= end)
50
+ temp[k++] = nums[j++];
51
+ for (int p = start; p <= end; p++)
52
+ nums[p] = temp[p];
53
+ }
54
+ // Solution 1-2) Library Sort
55
+ // bool containsDuplicate(vector<int>& nums) {
56
+ // vector<int> temp(nums.size(), 0);
57
+ // mergeSort(nums, 0, nums.size() - 1, temp);
58
+ // for (size_t i = 0; i < nums.size() - 1; i++)
59
+ // {
60
+ // if (nums[i] == nums[i + 1])
61
+ // return true;
62
+ // }
63
+ // return false;
64
+ // }
65
+
66
+ // solution 2 - hash
67
+ bool containsDuplicate (vector<int >& nums) {
68
+ unordered_map<int , int > hash;
69
+ for (size_t i = 0 ; i < nums.size (); i++)
70
+ {
71
+ if (hash.find (nums[i]) != hash.end ())
72
+ return true ;
73
+ hash[nums[i]] = i;
74
+ }
75
+ return false ;
76
+ }
77
+ };
0 commit comments