diff --git a/contains-duplicate/essaysir.java b/contains-duplicate/essaysir.java new file mode 100644 index 0000000000..bf0aa00b57 --- /dev/null +++ b/contains-duplicate/essaysir.java @@ -0,0 +1,12 @@ +import java.util.*; + +class Solution { + public boolean containsDuplicate(int[] nums) { + Set sets = new HashSet<>(); + for ( int i = 0; i < nums.length; i++){ + boolean added = sets.add(nums[i]); + if (!added) return true; + } + return false; + } +} diff --git a/house-robber/essaysir.java b/house-robber/essaysir.java new file mode 100644 index 0000000000..eef41621b1 --- /dev/null +++ b/house-robber/essaysir.java @@ -0,0 +1,15 @@ +class Solution { + public int rob(int[] nums) { + int prev = 0; // dp[i-2]: 두 칸 전까지의 최대 금액 + int curr = 0; // dp[i-1]: 한 칸 전까지의 최대 금액 + + for (int num : nums) { + // 현재 집을 털 경우(prev + num) vs 안 털 경우(curr) 중 큰 값 + int temp = Math.max(curr, prev + num); + prev = curr; + curr = temp; + } + + return curr; + } +} diff --git a/longest-consecutive-sequence/essaysir.java b/longest-consecutive-sequence/essaysir.java new file mode 100644 index 0000000000..e37b1ac54c --- /dev/null +++ b/longest-consecutive-sequence/essaysir.java @@ -0,0 +1,23 @@ +import java.util.*; + +class Solution { + // TC: O(n) + // SC: O(n) + public int longestConsecutive(int[] nums) { + // 연속적인 수의 개수를 구한다. + Arrays.sort(nums); + int maxCount = 0; + int cur = 1; + for ( int i = 1 ; i < nums.length; i ++){ + if (nums[i] == nums[i - 1]) { + continue; // 중복 건너뛰기 + } else if (nums[i - 1] + 1 == nums[i]) { + cur += 1; + } else { + cur = 1; + } + maxCount = Math.max(maxCount, cur); // 매 스텝마다 갱신 + } + return maxCount; + } +} diff --git a/top-k-frequent-elements/essaysir.java b/top-k-frequent-elements/essaysir.java new file mode 100644 index 0000000000..856764a4b5 --- /dev/null +++ b/top-k-frequent-elements/essaysir.java @@ -0,0 +1,27 @@ +import java.util.*; + +class Solution { + // TC: O(n log n) + // SC: O(n) + public int[] topKFrequent(int[] nums, int k) { + Map count = new HashMap<>(); + for ( int i = 0; i < nums.length; i++){ + count.put(nums[i], count.getOrDefault(nums[i],0)+ 1); + } + + PriorityQueue heap = new PriorityQueue<>((a,b) -> count.get(a) - count.get(b)); + + for ( int key : count.keySet()){ + heap.offer(key); + if ( heap.size() > k ){ + heap.poll(); + } + } + + int[] result = new int[k]; + for ( int i = 0; i < k; i++){ + result[i] = heap.poll(); + } + return result; + } +} diff --git a/two-sum/essaysir.java b/two-sum/essaysir.java new file mode 100644 index 0000000000..3eb19ebda5 --- /dev/null +++ b/two-sum/essaysir.java @@ -0,0 +1,17 @@ +import java.util.*; + +class Solution { + public int[] twoSum(int[] nums, int target) { + // TWO Sum , 순서는 상관이 없음. NC2 를 계산 필요 + int[] result = new int[2]; + for ( int i = 0; i < nums.length; i++){ + for ( int j = i + 1; j < nums.length; j++){ + if ( target == nums[i] + nums[j]){ + result[0] = i; + result[1] = j; + } + } + } + return result; + } +}