diff --git a/kth-smallest-element-in-a-bst/anniemon.js b/kth-smallest-element-in-a-bst/anniemon.js new file mode 100644 index 000000000..d049e1348 --- /dev/null +++ b/kth-smallest-element-in-a-bst/anniemon.js @@ -0,0 +1,34 @@ +/** + * 시간 복잡도: k번째 수가 가장 큰 수일 때는 최악의 경우이며, 모든 노드를 방문하므로 O(n) + * 공간 복잡도: 재귀 호출 스택의 깊이는 균형 잡힌 트리의 경우 O(logn), 편향된 트리는 O(n) + */ +/** + * Definition for a binary tree node. + * function TreeNode(val, left, right) { + * this.val = (val===undefined ? 0 : val) + * this.left = (left===undefined ? null : left) + * this.right = (right===undefined ? null : right) + * } + */ +/** + * @param {TreeNode} root + * @param {number} k + * @return {number} + */ +var kthSmallest = function(root, k) { + let kth; + let cnt = k; + + const dfs = (node) => { + if (!node) return; + dfs(node.left); + cnt--; + if(cnt ===0) { + kth = node.val + return; + } + dfs(node.right); + } + dfs(root) + return kth; +} diff --git a/lowest-common-ancestor-of-a-binary-search-tree/anniemon.js b/lowest-common-ancestor-of-a-binary-search-tree/anniemon.js new file mode 100644 index 000000000..374bfd209 --- /dev/null +++ b/lowest-common-ancestor-of-a-binary-search-tree/anniemon.js @@ -0,0 +1,30 @@ +/** + * 시간 복잡도: 트리의 한쪽 경로를 선택하면서 탐색하므로, 트리의 높이가 h면 O(h) + * 공간 복잡도: 재귀 호출 스택의 깊이는 균형 잡힌 트리의 경우 O(logn), 편향된 트리는 O(n) ==> O(h) + */ +/** + * Definition for a binary tree node. + * function TreeNode(val) { + * this.val = val; + * this.left = this.right = null; + * } + */ +/** + * @param {TreeNode} root + * @param {TreeNode} p + * @param {TreeNode} q + * @return {TreeNode} + */ +var lowestCommonAncestor = function(root, p, q) { + const dfs = (node, p, q) => { + if(node.val > p.val && node.val > q.val) { + return dfs(node.left, p, q); + } + if(node.val < p.val && node.val < q.val) { + return dfs(node.right, p, q); + } + return node; + } + return dfs(root, p, q); +}; + diff --git a/meeting-rooms/anniemon.js b/meeting-rooms/anniemon.js new file mode 100644 index 000000000..c58f7520b --- /dev/null +++ b/meeting-rooms/anniemon.js @@ -0,0 +1,30 @@ +/** + * 시간 복잡도: 정렬의 시간 복잡도와 같음. O(nlogn) + * 공간 복잡도: 자바스크립트의 정렬은 Timsort를 사용. 따라서 최악의 경우 공간 복잡도는 O(n) + */ +/** + * Definition of Interval: + * class Interval { + * constructor(start, end) { + * this.start = start; + * this.end = end; + * } + * } + */ + +class Solution { + /** + * @param {Interval[]} intervals + * @returns {boolean} + */ + canAttendMeetings(intervals) { + intervals.sort((a,b) => a.start - b.start) + + for(let i = 1; i < intervals.length; i++) { + if(intervals[i].start < intervals[i-1].end) { + return false; + } + } + return true; + } +}