Skip to content

Commit b1fb402

Browse files
authored
Merge pull request #1691 from geegong/main
[geegong] WEEK 01 solutions
2 parents cecb0bf + 9d5239b commit b1fb402

File tree

4 files changed

+189
-0
lines changed

4 files changed

+189
-0
lines changed

contains-duplicate/Geegong.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import java.util.HashMap;
2+
import java.util.HashSet;
3+
import java.util.Map;
4+
5+
public class Geegong {
6+
7+
8+
/**
9+
* time complexity : O(n)
10+
* space complexity : o(n)
11+
* @param nums
12+
* @return
13+
*/
14+
public boolean containsDuplicate(int[] nums) {
15+
HashSet<Integer> uniques = new HashSet<>();
16+
17+
for (int num : nums) {
18+
if (uniques.contains(num)) {
19+
return true;
20+
}
21+
22+
uniques.add(num);
23+
}
24+
25+
return false;
26+
}
27+
28+
}
29+
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import java.util.HashMap;
2+
import java.util.HashSet;
3+
import java.util.Map;
4+
5+
/**
6+
* time complexity : O(n)
7+
*/
8+
public class Geegong {
9+
10+
public int longestConsecutive(int[] nums) {
11+
HashSet<Integer> setOfNums = new HashSet<>();
12+
// key : startIndex , value : length
13+
Map<Integer, Integer> lengthMap = new HashMap<>();
14+
15+
// sort..? 를 해야될까 싶음..
16+
17+
// initialize
18+
for (int num : nums) {
19+
setOfNums.add(num);
20+
}
21+
22+
Integer longest = 0;
23+
24+
for (Integer num : setOfNums) {
25+
int length = iterate(setOfNums, num, 0, lengthMap);
26+
longest = Math.max(longest, length);
27+
}
28+
29+
return longest;
30+
}
31+
32+
public Integer iterate(HashSet<Integer> hashSet, int currIndex, int currLength, Map<Integer, Integer> lengthMap) {
33+
if (lengthMap.containsKey(currIndex)) {
34+
return lengthMap.get(currIndex);
35+
}
36+
37+
if (hashSet.contains(currIndex)) {
38+
currLength++;
39+
return iterate(hashSet, currIndex+1, currLength, lengthMap);
40+
41+
} else {
42+
lengthMap.put(currIndex, currLength);
43+
return currLength;
44+
}
45+
46+
}
47+
48+
}
49+

top-k-frequent-elements/Geegong.java

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
import java.util.HashMap;
2+
import java.util.HashSet;
3+
import java.util.Map;
4+
5+
public class Geegong {
6+
7+
8+
public int[] topKFrequent(int[] nums, int k) {
9+
int[] result = new int[k];
10+
11+
// key : num element in nums / value : frequency of num elements
12+
Map<Integer, Integer> numMap = new HashMap<>();
13+
14+
// key : frequency of num elements / value : HashSet<Integer> num elements
15+
Map<Integer, HashSet<Integer>> frequencyMap = new HashMap<>();
16+
17+
// most frequent numbers
18+
int maxCount = 0;
19+
20+
// initialize numMap
21+
for (int num : nums) {
22+
if (numMap.containsKey(num)) {
23+
Integer alreadyCounted = numMap.get(num);
24+
numMap.put(num, alreadyCounted + 1);
25+
} else {
26+
numMap.put(num, 1);
27+
}
28+
}
29+
30+
31+
//numHashSetMap
32+
for (int num : numMap.keySet()) {
33+
int frequencyOfNum = numMap.get(num);
34+
maxCount = Math.max(maxCount, frequencyOfNum);
35+
36+
if (frequencyMap.containsKey(frequencyOfNum)) {
37+
HashSet<Integer> alreadySet = frequencyMap.get(frequencyOfNum);
38+
alreadySet.add(num);
39+
40+
frequencyMap.put(frequencyOfNum, alreadySet);
41+
42+
} else {
43+
HashSet<Integer> newHashSet = new HashSet<>();
44+
newHashSet.add(num);
45+
46+
frequencyMap.put(frequencyOfNum, newHashSet);
47+
}
48+
}
49+
50+
51+
// maxCount 부터 decreasing
52+
int resultIndex=0;
53+
for(int frequency=maxCount; frequency>=0; frequency--) {
54+
if (resultIndex >= result.length) {
55+
return result;
56+
}
57+
58+
if (frequencyMap.containsKey(frequency)) {
59+
HashSet<Integer> numElements = frequencyMap.get(frequency);
60+
61+
for (int numElement : numElements) {
62+
result[resultIndex] = numElement;
63+
resultIndex++;
64+
65+
66+
if (resultIndex >= result.length) {
67+
return result;
68+
}
69+
}
70+
}
71+
}
72+
73+
return result;
74+
}
75+

two-sum/Geegong.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import java.util.HashMap;
2+
import java.util.Map;
3+
4+
public class Geegong {
5+
6+
/**
7+
* time complexity : O(n)
8+
* space complexity : O(n)
9+
* @param nums
10+
* @param target
11+
* @return
12+
*/
13+
public int[] twoSum(int[] nums, int target) {
14+
Map<Integer, Integer> map = new HashMap<>();
15+
int[] result = new int[2];
16+
17+
// if target = -9 / num = 1 , num = -10
18+
for (int index=0; index<nums.length; index++) {
19+
map.put(nums[index], index);
20+
}
21+
22+
for (int index=0; index<nums.length; index++) {
23+
int difference = target - nums[index];
24+
25+
if (map.containsKey(difference)
26+
&& map.get(difference) != index) {
27+
result[0] = index;
28+
result[1] = map.get(difference);
29+
return result;
30+
}
31+
}
32+
33+
return result;
34+
}
35+
}
36+

0 commit comments

Comments
 (0)