From 325d1b2e720fb9f66d3f6bbcd82ca36e7ade6440 Mon Sep 17 00:00:00 2001 From: JIA Date: Tue, 22 Jul 2025 01:12:49 +0900 Subject: [PATCH 01/10] top K Frequent --- contains-duplicate/Geegong.java | 80 +++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 contains-duplicate/Geegong.java diff --git a/contains-duplicate/Geegong.java b/contains-duplicate/Geegong.java new file mode 100644 index 000000000..035c6aa77 --- /dev/null +++ b/contains-duplicate/Geegong.java @@ -0,0 +1,80 @@ +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Map; + +public class Geegong { + + public int[] topKFrequent(int[] nums, int k) { + int[] result = new int[k]; + + // key : key / value : count + Map keyMap = new HashMap<>(); + + // key : count / value : HashSet keys + Map> countMap = new HashMap<>(); + + // 가장 많이 출연한 친구 + int maxCount = 0; + + for (int num : nums) { + int countToBePut = 0; + + if (keyMap.containsKey(num)) { + Integer alreadyCounted = keyMap.get(num); + countToBePut = alreadyCounted + 1; + keyMap.put(num, countToBePut); + + checkCountMapAndPutCount(countMap, num, countToBePut); + } else { + countToBePut = 1; + keyMap.put(num, countToBePut); + checkCountMapAndPutCount(countMap, num, countToBePut); + } + + maxCount = Math.max(maxCount, countToBePut); + } + + + // 가장 큰 숫자부터 꺼내볼까요오오오 우후 + int kIndex=0; + for (int index=maxCount; index >= 0; index--) { + if (kIndex >= k) { + return result; + } + + if (countMap.containsKey(index)) { + HashSet hashNums = countMap.get(index); + Iterator iterator = hashNums.iterator(); + while(iterator.hasNext()) { + + if (kIndex >= k) { + return result; + } + + result[kIndex] = iterator.next(); + kIndex++; + } + + } + + } + + return result; + + + } + + public void checkCountMapAndPutCount(Map> countMap, int key, int count) { + if (countMap.containsKey(count)) { + HashSet already = countMap.get(count); + already.add(key); + } else { + HashSet newSet = new HashSet<>(); + newSet.add(key); + countMap.put(count, newSet); + } + + } + +} From 55db6e99dde832cb837fec3f74db0caaa78fb5e8 Mon Sep 17 00:00:00 2001 From: JIA Date: Tue, 22 Jul 2025 01:22:46 +0900 Subject: [PATCH 02/10] add newline --- contains-duplicate/Geegong.java | 1 + 1 file changed, 1 insertion(+) diff --git a/contains-duplicate/Geegong.java b/contains-duplicate/Geegong.java index 035c6aa77..c5694fc7b 100644 --- a/contains-duplicate/Geegong.java +++ b/contains-duplicate/Geegong.java @@ -78,3 +78,4 @@ public void checkCountMapAndPutCount(Map> countMap, in } } + From 2c63bc1fb4beecf6fb788e2cf8b1a4881f10a63f Mon Sep 17 00:00:00 2001 From: JIA Date: Tue, 22 Jul 2025 23:51:43 +0900 Subject: [PATCH 03/10] test complete topKFrequent problem --- contains-duplicate/Geegong.java | 84 ++++++++++++++++----------------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/contains-duplicate/Geegong.java b/contains-duplicate/Geegong.java index c5694fc7b..5124baa91 100644 --- a/contains-duplicate/Geegong.java +++ b/contains-duplicate/Geegong.java @@ -8,73 +8,73 @@ public class Geegong { public int[] topKFrequent(int[] nums, int k) { int[] result = new int[k]; - // key : key / value : count - Map keyMap = new HashMap<>(); + // key : num element in nums / value : frequency of num elements + Map numMap = new HashMap<>(); - // key : count / value : HashSet keys - Map> countMap = new HashMap<>(); + // key : frequency of num elements / value : HashSet num elements + Map> frequencyMap = new HashMap<>(); - // 가장 많이 출연한 친구 + // most frequent numbers int maxCount = 0; + // initialize numMap for (int num : nums) { - int countToBePut = 0; + if (numMap.containsKey(num)) { + Integer alreadyCounted = numMap.get(num); + numMap.put(num, alreadyCounted + 1); + } else { + numMap.put(num, 1); + } + } + + + //numHashSetMap + for (int num : numMap.keySet()) { + int frequencyOfNum = numMap.get(num); + maxCount = Math.max(maxCount, frequencyOfNum); - if (keyMap.containsKey(num)) { - Integer alreadyCounted = keyMap.get(num); - countToBePut = alreadyCounted + 1; - keyMap.put(num, countToBePut); + if (frequencyMap.containsKey(frequencyOfNum)) { + HashSet alreadySet = frequencyMap.get(frequencyOfNum); + alreadySet.add(num); + + frequencyMap.put(frequencyOfNum, alreadySet); - checkCountMapAndPutCount(countMap, num, countToBePut); } else { - countToBePut = 1; - keyMap.put(num, countToBePut); - checkCountMapAndPutCount(countMap, num, countToBePut); - } + HashSet newHashSet = new HashSet<>(); + newHashSet.add(num); - maxCount = Math.max(maxCount, countToBePut); + frequencyMap.put(frequencyOfNum, newHashSet); + } } - // 가장 큰 숫자부터 꺼내볼까요오오오 우후 - int kIndex=0; - for (int index=maxCount; index >= 0; index--) { - if (kIndex >= k) { + // maxCount 부터 decreasing + int resultIndex=0; + for(int frequency=maxCount; frequency>=0; frequency--) { + if (resultIndex >= result.length) { return result; } - if (countMap.containsKey(index)) { - HashSet hashNums = countMap.get(index); - Iterator iterator = hashNums.iterator(); - while(iterator.hasNext()) { + if (frequencyMap.containsKey(frequency)) { + HashSet numElements = frequencyMap.get(frequency); + + for (int numElement : numElements) { + result[resultIndex] = numElement; + resultIndex++; - if (kIndex >= k) { + + if (resultIndex >= result.length) { return result; } - - result[kIndex] = iterator.next(); - kIndex++; } - } - } return result; - - } - public void checkCountMapAndPutCount(Map> countMap, int key, int count) { - if (countMap.containsKey(count)) { - HashSet already = countMap.get(count); - already.add(key); - } else { - HashSet newSet = new HashSet<>(); - newSet.add(key); - countMap.put(count, newSet); - } - + public boolean checkIsFull(int[] arr, int currIndex) { + return currIndex >= arr.length; } } From b664c85afbcdcd95f0cf9f6bc7aee1db1986c809 Mon Sep 17 00:00:00 2001 From: JIA Date: Wed, 23 Jul 2025 00:42:14 +0900 Subject: [PATCH 04/10] prgressing longestConsecutive --- longest-consecutive-sequence/Geegong.java | 42 +++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 longest-consecutive-sequence/Geegong.java diff --git a/longest-consecutive-sequence/Geegong.java b/longest-consecutive-sequence/Geegong.java new file mode 100644 index 000000000..bd7ccf6e8 --- /dev/null +++ b/longest-consecutive-sequence/Geegong.java @@ -0,0 +1,42 @@ +import java.util.HashSet; +import java.util.Iterator; + +public class Geegong { + + public int longestConsecutive(int[] nums) { + + HashSet setOfNums = new HashSet<>(); + int start = 0; + int end = 0; + + // initialize + for (int num : nums) { + setOfNums.add(num); + start = Math.min(start, num); + end = Math.max(end, num); + } + + Integer longest = 0; + Integer current = 0; + while (start <= end) { + + iterate(setOfNums, start, current); + longest = Math.max(longest, current); + } + } + + public Integer iterate(HashSet hashSet, Integer start, Integer currentLength) { + + if (hashSet.contains(start)) { + currentLength++; + iterate(hashSet, start+1, currentLength); + + } else { + // currentLength 를 리턴해야 하나.. + return start; + } + + } + +} + From da57f6b4e507c9ce7d70064072a0084529680cf6 Mon Sep 17 00:00:00 2001 From: JIA Date: Fri, 25 Jul 2025 01:05:00 +0900 Subject: [PATCH 05/10] find longest consecutive --- longest-consecutive-sequence/Geegong.java | 39 +++++++++++++---------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/longest-consecutive-sequence/Geegong.java b/longest-consecutive-sequence/Geegong.java index bd7ccf6e8..2a0e5624e 100644 --- a/longest-consecutive-sequence/Geegong.java +++ b/longest-consecutive-sequence/Geegong.java @@ -1,39 +1,46 @@ +import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; +import java.util.Map; +/** + * time complexity : O(n) + */ public class Geegong { public int longestConsecutive(int[] nums) { - HashSet setOfNums = new HashSet<>(); - int start = 0; - int end = 0; + // key : startIndex , value : length + Map lengthMap = new HashMap<>(); + + // sort..? 를 해야될까 싶음.. // initialize for (int num : nums) { setOfNums.add(num); - start = Math.min(start, num); - end = Math.max(end, num); } Integer longest = 0; - Integer current = 0; - while (start <= end) { - iterate(setOfNums, start, current); - longest = Math.max(longest, current); + for (Integer num : setOfNums) { + int length = iterate(setOfNums, num, 0, lengthMap); + longest = Math.max(longest, length); } + + return longest; } - public Integer iterate(HashSet hashSet, Integer start, Integer currentLength) { + public Integer iterate(HashSet hashSet, int currIndex, int currLength, Map lengthMap) { + if (lengthMap.containsKey(currIndex)) { + return lengthMap.get(currIndex); + } - if (hashSet.contains(start)) { - currentLength++; - iterate(hashSet, start+1, currentLength); + if (hashSet.contains(currIndex)) { + currLength++; + return iterate(hashSet, currIndex+1, currLength, lengthMap); } else { - // currentLength 를 리턴해야 하나.. - return start; + lengthMap.put(currIndex, currLength); + return currLength; } } From ffc11b7d5aa5142bd645b4532c012e18fb67abb6 Mon Sep 17 00:00:00 2001 From: JIA Date: Sat, 26 Jul 2025 00:20:54 +0900 Subject: [PATCH 06/10] two-sum --- two-sum/Geegong.java | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 two-sum/Geegong.java diff --git a/two-sum/Geegong.java b/two-sum/Geegong.java new file mode 100644 index 000000000..1a01d99c3 --- /dev/null +++ b/two-sum/Geegong.java @@ -0,0 +1,35 @@ +import java.util.HashMap; +import java.util.Map; + +public class Geegong { + + /** + * time complexity : O(n) + * space complexity : O(n) + * @param nums + * @param target + * @return + */ + public int[] twoSum(int[] nums, int target) { + Map map = new HashMap<>(); + int[] result = new int[2]; + + // if target = -9 / num = 1 , num = -10 + for (int index=0; index Date: Sat, 26 Jul 2025 00:24:30 +0900 Subject: [PATCH 07/10] find top k frequent elements --- top-k-frequent-elements/Geegong.java | 75 ++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 top-k-frequent-elements/Geegong.java diff --git a/top-k-frequent-elements/Geegong.java b/top-k-frequent-elements/Geegong.java new file mode 100644 index 000000000..4770f5422 --- /dev/null +++ b/top-k-frequent-elements/Geegong.java @@ -0,0 +1,75 @@ +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; + +public class Geegong { + + + public int[] topKFrequent(int[] nums, int k) { + int[] result = new int[k]; + + // key : num element in nums / value : frequency of num elements + Map numMap = new HashMap<>(); + + // key : frequency of num elements / value : HashSet num elements + Map> frequencyMap = new HashMap<>(); + + // most frequent numbers + int maxCount = 0; + + // initialize numMap + for (int num : nums) { + if (numMap.containsKey(num)) { + Integer alreadyCounted = numMap.get(num); + numMap.put(num, alreadyCounted + 1); + } else { + numMap.put(num, 1); + } + } + + + //numHashSetMap + for (int num : numMap.keySet()) { + int frequencyOfNum = numMap.get(num); + maxCount = Math.max(maxCount, frequencyOfNum); + + if (frequencyMap.containsKey(frequencyOfNum)) { + HashSet alreadySet = frequencyMap.get(frequencyOfNum); + alreadySet.add(num); + + frequencyMap.put(frequencyOfNum, alreadySet); + + } else { + HashSet newHashSet = new HashSet<>(); + newHashSet.add(num); + + frequencyMap.put(frequencyOfNum, newHashSet); + } + } + + + // maxCount 부터 decreasing + int resultIndex=0; + for(int frequency=maxCount; frequency>=0; frequency--) { + if (resultIndex >= result.length) { + return result; + } + + if (frequencyMap.containsKey(frequency)) { + HashSet numElements = frequencyMap.get(frequency); + + for (int numElement : numElements) { + result[resultIndex] = numElement; + resultIndex++; + + + if (resultIndex >= result.length) { + return result; + } + } + } + } + + return result; +} + From 41e563904a05fffc505a17d5f744b6759bad2cf5 Mon Sep 17 00:00:00 2001 From: JIA Date: Sat, 26 Jul 2025 00:27:31 +0900 Subject: [PATCH 08/10] =?UTF-8?q?top-k-frequent=20=EB=AC=B8=EC=A0=9C?= =?UTF-8?q?=EB=A5=BC=20=EC=9E=98=EB=AA=BB=20=EC=BB=A4=EB=B0=8B=ED=95=B4?= =?UTF-8?q?=EC=84=9C=20=EB=8B=A4=EC=8B=9C=20=EC=88=98=EC=A0=95=ED=95=98?= =?UTF-8?q?=EC=97=AC=20=EC=BB=A4=EB=B0=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contains-duplicate/Geegong.java | 70 +++------------------------------ 1 file changed, 6 insertions(+), 64 deletions(-) diff --git a/contains-duplicate/Geegong.java b/contains-duplicate/Geegong.java index 5124baa91..6a5550cee 100644 --- a/contains-duplicate/Geegong.java +++ b/contains-duplicate/Geegong.java @@ -1,80 +1,22 @@ import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; import java.util.Map; public class Geegong { - public int[] topKFrequent(int[] nums, int k) { - int[] result = new int[k]; - // key : num element in nums / value : frequency of num elements - Map numMap = new HashMap<>(); + public boolean containsDuplicate(int[] nums) { + HashSet uniques = new HashSet<>(); - // key : frequency of num elements / value : HashSet num elements - Map> frequencyMap = new HashMap<>(); - - // most frequent numbers - int maxCount = 0; - - // initialize numMap for (int num : nums) { - if (numMap.containsKey(num)) { - Integer alreadyCounted = numMap.get(num); - numMap.put(num, alreadyCounted + 1); - } else { - numMap.put(num, 1); - } - } - - - //numHashSetMap - for (int num : numMap.keySet()) { - int frequencyOfNum = numMap.get(num); - maxCount = Math.max(maxCount, frequencyOfNum); - - if (frequencyMap.containsKey(frequencyOfNum)) { - HashSet alreadySet = frequencyMap.get(frequencyOfNum); - alreadySet.add(num); - - frequencyMap.put(frequencyOfNum, alreadySet); - - } else { - HashSet newHashSet = new HashSet<>(); - newHashSet.add(num); - - frequencyMap.put(frequencyOfNum, newHashSet); + if (uniques.contains(num)) { + return true; } - } - - - // maxCount 부터 decreasing - int resultIndex=0; - for(int frequency=maxCount; frequency>=0; frequency--) { - if (resultIndex >= result.length) { - return result; - } - - if (frequencyMap.containsKey(frequency)) { - HashSet numElements = frequencyMap.get(frequency); - for (int numElement : numElements) { - result[resultIndex] = numElement; - resultIndex++; - - - if (resultIndex >= result.length) { - return result; - } - } - } + uniques.add(num); } - return result; - } - - public boolean checkIsFull(int[] arr, int currIndex) { - return currIndex >= arr.length; + return false; } } From b99d6da76fc277ed98b15a557d2bd45dc800c5da Mon Sep 17 00:00:00 2001 From: JIA Date: Sat, 26 Jul 2025 00:29:28 +0900 Subject: [PATCH 09/10] =?UTF-8?q?tc,=20sc=20=EC=A3=BC=EC=84=9D=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contains-duplicate/Geegong.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/contains-duplicate/Geegong.java b/contains-duplicate/Geegong.java index 6a5550cee..348e341ae 100644 --- a/contains-duplicate/Geegong.java +++ b/contains-duplicate/Geegong.java @@ -5,6 +5,12 @@ public class Geegong { + /** + * time complexity : O(n) + * space complexity : o(n) + * @param nums + * @return + */ public boolean containsDuplicate(int[] nums) { HashSet uniques = new HashSet<>(); From 9d5239b69243f2259a36045c6b258f714c44be91 Mon Sep 17 00:00:00 2001 From: JIA Date: Sat, 26 Jul 2025 00:31:47 +0900 Subject: [PATCH 10/10] add newline --- two-sum/Geegong.java | 1 + 1 file changed, 1 insertion(+) diff --git a/two-sum/Geegong.java b/two-sum/Geegong.java index 1a01d99c3..3fd371057 100644 --- a/two-sum/Geegong.java +++ b/two-sum/Geegong.java @@ -33,3 +33,4 @@ public int[] twoSum(int[] nums, int target) { return result; } } +