Skip to content

Commit d9d1f59

Browse files
authored
Merge pull request #1080 from forest000014/main
[forest000014] Week 13
2 parents 8cb13b9 + 2dc0827 commit d9d1f59

File tree

5 files changed

+179
-0
lines changed

5 files changed

+179
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/*
2+
# Time Complexity: O(nlogn)
3+
# Space Complexity: O(nlogn)
4+
5+
*/
6+
class MedianFinder {
7+
8+
private PriorityQueue<Integer> pq1; // 1번째 ~ 가운데 원소 (max heap)
9+
private PriorityQueue<Integer> pq2; // 가운데+1번째 ~ 마지막 원소 (min heap)
10+
11+
public MedianFinder() {
12+
pq1 = new PriorityQueue<>(Collections.reverseOrder());
13+
pq2 = new PriorityQueue<>();
14+
}
15+
16+
public void addNum(int num) {
17+
18+
if (pq1.size() == pq2.size()) {
19+
if (pq1.peek() == null || pq1.peek() >= num) {
20+
pq1.add(num);
21+
} else {
22+
pq2.add(num);
23+
pq1.add(pq2.poll());
24+
}
25+
} else {
26+
if (pq1.peek() == null || pq1.peek() >= num) {
27+
pq1.add(num);
28+
pq2.add(pq1.poll());
29+
} else {
30+
pq2.add(num);
31+
}
32+
}
33+
}
34+
35+
public double findMedian() {
36+
if (pq1.size() == pq2.size()) {
37+
return (pq1.peek() + pq2.peek()) / 2.0;
38+
} else {
39+
return pq1.peek();
40+
}
41+
}
42+
}
43+
44+
/**
45+
* Your MedianFinder object will be instantiated and called as such:
46+
* MedianFinder obj = new MedianFinder();
47+
* obj.addNum(num);
48+
* double param_2 = obj.findMedian();
49+
*/

insert-interval/forest000014.java

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/*
2+
# Time Complexity: O(n)
3+
# Space Complexity: O(1)
4+
*/
5+
class Solution {
6+
public int[][] insert(int[][] intervals, int[] newInterval) {
7+
ArrayList<int[]> answer = new ArrayList<>();
8+
9+
int i = 0;
10+
int n = intervals.length;
11+
12+
// newInterval보다 왼쪽의 구간들 추가
13+
while (i < n && intervals[i][1] < newInterval[0]) {
14+
answer.add(intervals[i]);
15+
i++;
16+
}
17+
18+
// newInterval과 겹치는 구간들 병합
19+
while (i < n && intervals[i][0] <= newInterval[1]) {
20+
newInterval[0] = Math.min(newInterval[0], intervals[i][0]);
21+
newInterval[1] = Math.max(newInterval[1], intervals[i][1]);
22+
i++;
23+
}
24+
answer.add(newInterval);
25+
26+
// newInterval보다 오른쪽의 구간들 추가
27+
while (i < n) {
28+
answer.add(intervals[i]);
29+
i++;
30+
}
31+
32+
return answer.toArray(new int[answer.size()][]);
33+
}
34+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
/*
2+
# Time Complexity: O(n)
3+
# Space Complexity: O(n)
4+
5+
heap을 사용한 풀이, in-order traversal을 사용한 풀이 풀어볼 것!
6+
*/
7+
/**
8+
* Definition for a binary tree node.
9+
* public class TreeNode {
10+
* int val;
11+
* TreeNode left;
12+
* TreeNode right;
13+
* TreeNode() {}
14+
* TreeNode(int val) { this.val = val; }
15+
* TreeNode(int val, TreeNode left, TreeNode right) {
16+
* this.val = val;
17+
* this.left = left;
18+
* this.right = right;
19+
* }
20+
* }
21+
*/
22+
class Solution {
23+
public int kthSmallest(TreeNode root, int k) {
24+
Map<TreeNode, Integer> sizes = new HashMap<>();
25+
26+
calculateSize(root, sizes);
27+
28+
return findKth(root, k, sizes);
29+
}
30+
31+
private int calculateSize(TreeNode root, Map<TreeNode, Integer> sizes) {
32+
if (root == null) return 0;
33+
34+
int left = calculateSize(root.left, sizes);
35+
int right = calculateSize(root.right, sizes);
36+
37+
sizes.put(root, left + right + 1);
38+
return left + right + 1;
39+
}
40+
41+
private int findKth(TreeNode root, int k, Map<TreeNode, Integer> sizes) {
42+
int left = (root.left == null) ? 0 : sizes.get(root.left);
43+
int right = (root.right == null) ? 0 : sizes.get(root.right);
44+
45+
if (left == k - 1) {
46+
return root.val;
47+
} else if (left >= k) {
48+
return findKth(root.left, k, sizes);
49+
} else {
50+
return findKth(root.right, k - left - 1, sizes);
51+
}
52+
}
53+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/*
2+
# Time Complexity: O(n)
3+
# Space Compleixty: O(1)
4+
*/
5+
6+
/**
7+
* Definition for a binary tree node.
8+
* public class TreeNode {
9+
* int val;
10+
* TreeNode left;
11+
* TreeNode right;
12+
* TreeNode(int x) { val = x; }
13+
* }
14+
*/
15+
16+
class Solution {
17+
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
18+
// null check unnecessary
19+
20+
if (root.val > p.val && root.val > q.val) {
21+
return lowestCommonAncestor(root.left, p, q);
22+
} else if (root.val < p.val && root.val < q.val) {
23+
return lowestCommonAncestor(root.right, p, q);
24+
} else {
25+
return root;
26+
}
27+
}
28+
}

meeting-rooms/forest000014.java

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/*
2+
# Time Complexity: O(nlogn)
3+
# Space Complexity: O(1)
4+
*/
5+
class Solution {
6+
public boolean canAttendMeetings(int[][] intervals) {
7+
Arrays.sort(intervals, (a, b) -> a[0] - b[0]);
8+
9+
for (int i = 1; i < intervals.length; i++) {
10+
if (intervals[i][0] < intervals[i - 1][1]) return false;
11+
}
12+
13+
return true;
14+
}
15+
}

0 commit comments

Comments
 (0)