File tree Expand file tree Collapse file tree 3 files changed +86
-0
lines changed
kth-smallest-element-in-a-bst
lowest-common-ancestor-of-a-binary-search-tree Expand file tree Collapse file tree 3 files changed +86
-0
lines changed Original file line number Diff line number Diff line change 1+ package leetcode_study
2+
3+ /* *
4+ * binary search tree์์ k ๋ฒ์งธ ์์ ์๋ฅผ ๋ฐํํ๋ ๋ฌธ์
5+ * stack ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํด ์ค์ ์ํ๋ฅผ ๊ตฌํํฉ๋๋ค.
6+ *
7+ * ์๊ฐ ๋ณต์ก๋: O(n) or O(logn)
8+ * -> 2๋ฒ์ loop์ ์ํํ๊ธฐ ๋๋ฌธ์ O(n^2)์ ์๊ฐ ๋ณต์ก๋๋ก ํ๋จํ ์ ์์ง๋ง ์ ํ๋ n ์์์ ์ํ๋ฅผ ์งํํ๊ธฐ ๋๋ฌธ์ O(n)์ ๋์ง ์์ต๋๋ค.
9+ * -> ๋ง์ฝ BST๊ฐ ๊ท ํ์ด ์กํ ์๋ค๋ฉด O(logn)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ต๋๋ค.
10+ *
11+ * ๊ณต๊ฐ ๋ณต์ก๋: O(n)
12+ * -> ํ์ํ node๋ฅผ ์ ์ฅํ stack ๊ณต๊ฐ
13+ */
14+ fun kthSmallest (root : TreeNode ? , k : Int ): Int {
15+ val stack = ArrayDeque <TreeNode >()
16+ var current = root
17+ var count = 0
18+
19+ while (stack.isNotEmpty() || current != null ) {
20+ // ์ผ์ชฝ ์์ ๋
ธ๋๋ค์ ๊ณ์ ํ์ํ์ฌ stack์ ์ถ๊ฐ
21+ while (current != null ) {
22+ stack.addLast(current)
23+ current = current.left
24+ }
25+
26+ // ๊ฐ์ฅ ์ผ์ชฝ ๋
ธ๋๋ฅผ pop
27+ current = stack.removeLast()
28+ count++
29+
30+ // k๋ฒ์งธ ๋
ธ๋๋ผ๋ฉด ๊ฐ ๋ฐํ
31+ if (count == k) return current.`val `
32+
33+ // ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ ํ์
34+ current = current.right
35+ }
36+
37+ return - 1 // ์ด๋ก ์ ์ผ๋ก ๋๋ฌํ ์ ์๋ ๋ถ๋ถ
38+ }
Original file line number Diff line number Diff line change 1+ package leetcode_study
2+
3+ /* *
4+ * Binary Search Tree์์ ๊ฐ์ฅ ๊ทผ์ ํ ๊ณตํต ์กฐ์์ ์ฐพ๋ ๋ฌธ์
5+ * BST์ ์ฑ์ง์ธ ๋ถ๋ชจ ๋
ธ๋๋ณด๋ค ์์ ๊ฐ์ ์ผ์ชฝ ๋ถ๋ชจ ๋
ธ๋๋ณด๋ค ํฐ ๊ฐ์ ์ค๋ฅธ์ชฝ์ ์์นํจ์ ์ฌ์ฉํด ๋ฌธ์ ํด๊ฒฐ
6+ *
7+ * ์๊ฐ ๋ณต์ก๋: O(n) or O(logn)
8+ * -> balanced BST์ ๊ฒฝ์ฐ ์กฐํ ๊ตฌ๊ฐ์ด ์ ๋ฐ์ผ๋ก ์ค๊ธฐ ๋๋ฌธ์ O(logn)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ง ํธํฅ๋ ๊ฒฝ์ฐ O(n)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง.
9+ *
10+ * ๊ณต๊ฐ ๋ณต์ก๋: O(1)
11+ * -> ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ์ฌ ์ถ๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์์
12+ */
13+ fun lowestCommonAncestor (root : TreeNode ? , p : TreeNode ? , q : TreeNode ? ): TreeNode ? {
14+ var currentNode = root
15+
16+ while (currentNode != null ) {
17+ when {
18+ p?.`val `!! < currentNode.`val ` && q?.`val `!! < currentNode.`val ` -> currentNode = currentNode.left
19+ p?.`val `!! > currentNode.`val ` && q?.`val `!! > currentNode.`val ` -> currentNode = currentNode.right
20+ else -> return currentNode
21+ }
22+ }
23+ return null
24+ }
Original file line number Diff line number Diff line change 1+ package leetcode_study
2+
3+ /*
4+ * ๊ฒน์น๋ ์๊ฐ ์์ด ๋ฏธํ
๋ฃธ ์๊ฐ์ ์ก์ ์ ์๋์ง ํ๋จํ๋ ๋ฌธ์
5+ * ์์ ์๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ ํ ์ข
๋ฃ ์๊ฐ๊ณผ ๋ค์ ๋ฏธํ
์ ์๊ฐ์ ๋น๊ตํด ๊ฒน์น๋ ๋ถ๋ถ์ด ์๋ค๋ฉด ์ก์ ์ ์๋ ๋ฏธํ
๋ฃธ์ผ๋ก ํ๋จ
6+ *
7+ * ์๊ฐ ๋ณต์ก๋: O(n logn)
8+ * -> intervals null check: O(n)
9+ * -> intervals start ๊ฐ์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ. Timsort ์ฌ์ฉ: O(n logn)
10+ * -> ๊ฒน์น๋ ๊ตฌ๊ฐ ํ๋จ loop: O(n)
11+ *
12+ * ๊ณต๊ฐ ๋ณต์ก๋: O(n)
13+ * -> ์ ๋ ฌ๋ ์๋ก์ด ๋ฏธํ
์๊ฐ ๋ฐฐ์ด ์์ฑ: O(n)
14+ * */
15+ fun canAttendMeetings (intervals : List <Interval ?>): Boolean {
16+ if (intervals.isEmpty()) return true
17+ val sortedByList = intervals.filterNotNull().sortedBy { it.start }
18+ for (i in 1 until sortedByList.size) {
19+ if (sortedByList[i - 1 ].end > sortedByList[i].start) {
20+ return false
21+ }
22+ }
23+ return true
24+ }
You canโt perform that action at this time.
0 commit comments