Skip to content

Commit 4e124bc

Browse files
authored
Merge pull request #1687 from ohgyulim/main
[ohgyulim] WEEK 01 solutions
2 parents 040ceeb + da3ac5d commit 4e124bc

File tree

5 files changed

+126
-0
lines changed

5 files changed

+126
-0
lines changed

contains-duplicate/ohgyulim.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import java.util.*;
2+
/* 시간 복잡도: O(N), nums.length를 n이라고 할 때, 시간 복잡도는 O(N)
3+
* HashSet
4+
* - contains: O(1)
5+
* - add: O(1)
6+
*
7+
* 공간 복잡도: O(N), Set에 최대 n개의 요소를 저장할 수 있음
8+
*/
9+
class Solution {
10+
public boolean containsDuplicate(int[] nums) {
11+
Set<Integer> set = new HashSet<>();
12+
for (int num : nums) {
13+
if (set.contains(num)) return true;
14+
set.add(num);
15+
}
16+
return false;
17+
}
18+
}

house-robber/ohgyulim.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution {
2+
/* 시간 복잡도: O(N)
3+
* - for 루프: O(N)
4+
* 공간 복잡도: O(N), dp배열
5+
*/
6+
public int rob(int[] nums) {
7+
int n = nums.length;
8+
int[] dp = new int[n];
9+
dp[0] = nums[0];
10+
if (n > 1) dp[1] = Math.max(nums[0], nums[1]);
11+
for (int i = 2; i < n; i++) {
12+
dp[i] = Math.max(dp[i - 2] + nums[i], dp[i - 1]);
13+
}
14+
15+
return dp[n - 1];
16+
}
17+
}
18+
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import java.util.*;
2+
3+
class Solution {
4+
/* 시간 복잡도: O(N)
5+
* - for 루프: O(N) O(N)
6+
* - HashSet(add, contains): O(1)
7+
*
8+
* 공간 복잡도: O(N), HashSet에 n개
9+
*/
10+
public int longestConsecutive(int[] nums) {
11+
Set<Integer> set = new HashSet<>();
12+
for (int num : nums) {
13+
set.add(num);
14+
}
15+
16+
int answer = 0;
17+
for (int num : set) {
18+
if (!set.contains(num - 1)) {
19+
int cur = num;
20+
int count = 1;
21+
while (set.contains(cur + 1)) {
22+
cur += 1;
23+
count += 1;
24+
}
25+
answer = Math.max(answer, count);
26+
}
27+
}
28+
29+
return answer;
30+
}
31+
}
32+
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import java.util.*;
2+
3+
4+
class Solution {
5+
/* 시간 복잡도: O(N + M * log k)
6+
* - for 루프: O(N), frequency 구하기
7+
* - for 루프: O(M * log k), Map 순회
8+
- Map 요소: M개
9+
* - PriorityQueue 연산 (offer, poll): 평균 O(logk)
10+
*
11+
* 공간 복잡도: O(N + k), HashMap에 n개 + PriorityQueue에 k개
12+
*/
13+
public int[] topKFrequent(int[] nums, int k) {
14+
Map<Integer, Integer> frequencyMap = new HashMap<>();
15+
// [num, frequency]
16+
PriorityQueue<int[]> minHeap = new PriorityQueue<>((o1, o2) -> {
17+
return o1[1] - o2[1];
18+
});
19+
for (int num : nums) {
20+
frequencyMap.put(num, frequencyMap.getOrDefault(num, 0) + 1);
21+
}
22+
for (var entry: frequencyMap.entrySet()) {
23+
minHeap.add(new int[]{entry.getKey(), entry.getValue()});
24+
if (minHeap.size() > k) {
25+
minHeap.poll();
26+
}
27+
}
28+
29+
int[] answer = new int[k];
30+
for (int i = 0; i < k; i++) {
31+
answer[i] = minHeap.poll()[0];
32+
}
33+
return answer;
34+
}
35+
}
36+

two-sum/ohgyulim.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import java.util.*;
2+
3+
class Solution {
4+
/* 시간 복잡도: O(N), nums.length를 n이라고 할 때, 시간 복잡도는 O(N)
5+
* - for 루프: O(N)
6+
* - HashMap 연산 (containsKey, put): 평균 O(1)
7+
*
8+
* 공간 복잡도: O(N), HashMap에 최대 n개의 요소를 저장할 수 있음
9+
*/
10+
public int[] twoSum(int[] nums, int target) {
11+
Map<Integer, Integer> numToIndex = new HashMap<>();
12+
for (int i = 0; i < nums.length; i++) {
13+
int remains = target - nums[i];
14+
if (numToIndex.containsKey(remains)) {
15+
return new int[]{i, numToIndex.get(remains)};
16+
}
17+
numToIndex.put(nums[i], i);
18+
}
19+
return null;
20+
}
21+
}
22+

0 commit comments

Comments
 (0)