Skip to content

Commit 580d05f

Browse files
jaejeong1μž₯μž¬μ •
andauthored
[jaejeong1] WEEK 01 solutions (#1981)
* Top K Frequent Elements * Longest Consecutive Sequence * remove test file --------- Co-authored-by: μž₯μž¬μ • <jangjaejeong@baejieun-ui-MacBookPro.local>
1 parent 4cd867e commit 580d05f

File tree

2 files changed

+49
-48
lines changed

2 files changed

+49
-48
lines changed

β€Žlongest-consecutive-sequence/jaejeong1.javaβ€Ž

Lines changed: 23 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -4,43 +4,33 @@
44
class SolutionLongestConsecutiveSequence {
55

66
public int longestConsecutive(int[] nums) {
7-
// μ •λ ¬λ˜μ§€ μ•Šμ€ μ •μˆ˜ nums 배열이 μ£Όμ–΄μ§€λ©΄ κ°€μž₯ κΈ΄ 연속 μš”μ†Œ μ‹œν€€μŠ€ 길이λ₯Ό λ°˜ν™˜
8-
// O(N) μ‹œκ°„ λ‚΄ μ‹€ν–‰λ˜μ•Όν•¨
9-
// μ „λΆ€ ν•΄μ‹œλ§΅μ— λ•Œλ €λ„£κ³ , ν‚€λ₯Ό κΊΌλ‚΄ 연속 μš”μ†Œκ°€ μžˆλŠ”μ§€ ν™•μΈν•œλ‹€
10-
// 연속 μš”μ†Œκ°€ 있으면 answerλ₯Ό 1 μ¦κ°€μ‹œν‚€κ³ , 연속 μš”μ†ŒλŠ” μ œκ±°ν•œλ‹€
11-
// μ‹œκ°„λ³΅μž‘λ„: O(N), κ³΅κ°„λ³΅μž‘λ„: O(N)
12-
13-
Set<Integer> set = new HashSet<>();
14-
for (var num : nums) {
15-
set.add(num);
16-
}
17-
var answer = 0;
18-
for (var num : nums) {
19-
var length = 1;
20-
21-
if (set.contains(num-1)) {
22-
set.remove(num);
23-
var minusKey = num;
24-
while (set.contains(--minusKey)) {
25-
length++;
26-
set.remove(minusKey);
27-
}
7+
// μ‹œν€€μŠ€ 쑰회λ₯Ό O(1)에 μˆ˜ν–‰ κ°€λŠ₯ν•˜κ³ , 쀑볡은 λ¬΄μ‹œν•  수 μžˆλŠ” μ‘°κ±΄μ΄λ―€λ‘œ Set이 μ ν•©ν•œ 자료ꡬ쑰
8+
// μ‹œκ°„λ³΅μž‘λ„: O(N), κ³΅κ°„λ³΅μž‘λ„: O(N)
9+
Set<Integer> num_set = new HashSet<Integer>();
10+
for (int num : nums) {
11+
num_set.add(num);
2812
}
2913

30-
if (set.contains(num+1)) {
31-
set.remove(num);
32-
var plusKey = num;
33-
while (set.contains(++plusKey)) {
34-
length++;
35-
set.remove(plusKey);
36-
}
37-
}
14+
int longestSequence = 0;
15+
16+
// μ‹œκ°„λ³΅μž‘λ„: O(N)
17+
for (int num : num_set) {
18+
// μ‹œν€€μŠ€ 쀑간에 μžˆλŠ” μˆ«μžκ°€ μ•„λ‹Œ μ‹œμž‘ν•˜λŠ” 숫자λ₯Ό 찾음
19+
// μ‹œμž‘ν•˜λŠ” μˆ«μžλŠ” - 1 값이 Set에 없을 것
20+
if (!num_set.contains(num - 1)) {
21+
int currentNum = num;
22+
int currentLength = 1;
23+
// + 1 값이 Set에 μžˆλŠ” μ§€ ν™•μΈν•˜λ©΄μ„œ 증가
24+
while (num_set.contains(currentNum + 1)) {
25+
currentNum += 1;
26+
currentLength += 1;
27+
}
3828

39-
if (length > answer) {
40-
answer = length;
29+
// μˆœνšŒκ°€ λλ‚˜λ©΄ μ΅œλŒ€ μ‹œν€€μŠ€ 길이인지 ν™•μΈν•˜κ³  적용
30+
longestSequence = Math.max(longestSequence, currentLength);
31+
}
4132
}
42-
}
4333

44-
return answer;
34+
return longestSequence;
4535
}
4636
}
Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,35 @@
11
import java.util.HashMap;
22
import java.util.Map;
3+
import java.util.PriorityQueue;
4+
import java.util.Queue;
35

46
class SolutionTopKFrequentElements {
57
public int[] topKFrequent(int[] nums, int k) {
6-
// λΉˆλ„μˆœμœΌλ‘œ k개 λ°˜ν™˜
7-
// λΉˆλ„ 체크: ν•΄μ‹œλ§΅μœΌλ‘œ 카운트. μ‹œκ°„λ³΅μž‘λ„ O(N), κ³΅κ°„λ³΅μž‘λ„ O(N)
8-
// λΉˆλ„μˆœ μ •λ ¬: sorting, μ‹œκ°„λ³΅μž‘λ„ O(N log N), κ³΅κ°„λ³΅μž‘λ„ O(N)
9-
// ν•©μ‚°: μ‹œκ°„λ³΅μž‘λ„ O(N log N), κ³΅κ°„λ³΅μž‘λ„ O(N)
8+
// 풀이
9+
// μ‹œκ°„λ³΅μž‘λ„: O(N log K), κ³΅κ°„λ³΅μž‘λ„: O(N)
1010

11-
// λΉˆλ„ 체크
12-
Map<Integer, Integer> freq = new HashMap<>();
13-
for (int num : nums) {
14-
freq.put(num, freq.getOrDefault(num, 0) + 1);
15-
}
11+
// 숫자 별 λΉˆλ„ λˆ„μ μ„ Map 이용
12+
// μ‹œκ°„λ³΅μž‘λ„: O(N), κ³΅κ°„λ³΅μž‘λ„: O(N)
13+
Map<Integer, Integer> count = new HashMap<>();
14+
for (int n: nums) {
15+
count.put(n, count.getOrDefault(n, 0) + 1);
16+
}
1617

17-
// λΉˆλ„μˆœ μ •λ ¬
18-
return freq.keySet().stream()
19-
.sorted((a, b) -> freq.get(b) - freq.get(a))
20-
.mapToInt(i -> i)
21-
.limit(k) // λ°°μ—΄μ—μ„œ μƒμœ„ k개만 λ°˜ν™˜
22-
.toArray();
18+
Queue<Integer> heap = new PriorityQueue<>((x, y) -> count.get(x) - count.get(y));
19+
// κ°€μž₯ λΉˆλ²ˆν•œ k개의 수λ₯Ό λ§Œλ“€κΈ° μœ„ν•΄ μš°μ„ μˆœμœ„ 큐λ₯Ό μ‚¬μš©
20+
// μ‹œκ°„λ³΅μž‘λ„: O(N log k), κ³΅κ°„λ³΅μž‘λ„: O(N)
21+
for (int n: count.keySet()) {
22+
heap.add(n);
23+
if (heap.size() > k) heap.poll(); // κ°€μž₯ λΉˆλ²ˆν•œ Kκ°œκ°€ λ§Œμ‘±λμœΌλ‹ˆ 더이상 μΆ”κ°€ν•˜μ§€ μ•Šκ³  μ œμ™Έ
24+
}
25+
26+
// k ~ 0 μˆœμ„œλŒ€λ‘œ νž™μ—μ„œ μ—­μˆœμœΌλ‘œ λ½‘μŒ
27+
// μ‹œκ°„λ³΅μž‘λ„: O(k log k), κ³΅κ°„λ³΅μž‘λ„: O(N)
28+
int[] result = new int[k];
29+
for(int i = k - 1; i >= 0; --i){
30+
result[i] = heap.poll();
31+
}
32+
33+
return result;
2334
}
2435
}

0 commit comments

Comments
Β (0)