diff --git a/insert-interval/hyeri0903.java b/insert-interval/hyeri0903.java new file mode 100644 index 000000000..b8dd3ef0f --- /dev/null +++ b/insert-interval/hyeri0903.java @@ -0,0 +1,41 @@ +class Solution { + public int[][] insert(int[][] intervals, int[] newInterval) { + /** + 1.문제: newInterval 을 추가 후 intervals 오름차순 재정렬 + 2.constraints: start 기준으로 ascending order + 3.solutions + - newIntervals start 보다 앞에있는 것들은 merge 필요 없음 + - 즉 intervalse[i][1] < newInterval[0] 이면 merge X + - intervals[i][0] <= newInterval[1] 이면 merge + - 마지막에 겹치는 부분은 skip 후 intervals 재정렬 + time: O(n), space: O(1) + */ + + List result = new ArrayList<>(); + int i = 0; + int n = intervals.length; + + //1.newInterval 앞에 있는 값은 그대로 result add + while(i < n && intervals[i][1] < newInterval[0]) { + result.add(intervals[i]); + i += 1; + } + + //2.overlap 구간은 merge + while(i < n && intervals[i][0] <= newInterval[1]) { + newInterval[0] = Math.min(newInterval[0], intervals[i][0]); + newInterval[1] = Math.max(newInterval[1], intervals[i][1]); + i += 1; + } + result.add(newInterval); + + //3.나머지 result에 add + while(i < n) { + result.add(intervals[i]); + i++; + } + + return result.toArray(new int[result.size()][]); + + } +} diff --git a/kth-smallest-element-in-a-bst/hyeri0903.java b/kth-smallest-element-in-a-bst/hyeri0903.java new file mode 100644 index 000000000..304804bd4 --- /dev/null +++ b/kth-smallest-element-in-a-bst/hyeri0903.java @@ -0,0 +1,48 @@ +/** + * Definition for a binary tree node. + * public class TreeNode { + * int val; + * TreeNode left; + * TreeNode right; + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } + * } + */ +class Solution { + private int count = 0; + private int answer = 0; + public int kthSmallest(TreeNode root, int k) { + /** + 1.BST에서 K번째 가장 작은 값 찾기 + 2.constraints : node 개수 ㅡin = 0, max = 10000 + 3.solutions: + - k번째 방문한 노드가 k번째로 작은 값 (bst 이므로) + - dfs search (inorder traversal) + */ + + dfs(root, k); + return answer; + } + private void dfs(TreeNode node, int k) { + if(node == null) { + return; + } + + + dfs(node.left, k); + count++; + + if(count == k) { + answer = node.val; + return; + } + + dfs(node.right, k); + } + +} diff --git a/same-tree/hyeri0903.java b/same-tree/hyeri0903.java index 56a62885b..0583b19c6 100644 --- a/same-tree/hyeri0903.java +++ b/same-tree/hyeri0903.java @@ -16,7 +16,7 @@ class Solution { public boolean isSameTree(TreeNode p, TreeNode q) { /** - 1.problem: 2개의 bst 가 동일한지 체크 + 1.problem: 2개의 binary tree 가 동일한지 체크 2.constraints - 구조와 노드가 동일해야된다 3.solution - DFS 1) 두 트리의 노드가 모두 null -> true