File tree Expand file tree Collapse file tree 4 files changed +128
-0
lines changed
container-with-most-water
design-add-and-search-words-data-structure
longest-increasing-subsequence Expand file tree Collapse file tree 4 files changed +128
-0
lines changed Original file line number Diff line number Diff line change 1+ /* *
2+ * 시간 복잡도: O(n)
3+ * 공간 복잡도: O(1)
4+ */
5+
6+ class Solution {
7+ fun maxArea (height : IntArray ): Int {
8+ var i = 0
9+ var j = height.size - 1
10+ var max = 0
11+
12+ while (i < j) {
13+ val h = minOf(height[i], height[j])
14+ max = maxOf(max, (j - i) * h)
15+
16+ if (height[i] <= height[j]) i++
17+ else j--
18+ }
19+
20+ return max
21+ }
22+ }
Original file line number Diff line number Diff line change 1+ class WordDictionary () {
2+
3+ class TrieNode {
4+ val children = mutableMapOf<Char , TrieNode >()
5+ var isEndOfWord = false
6+ }
7+
8+ private val root = TrieNode ()
9+
10+ fun addWord (word : String ) {
11+ var current = root
12+
13+ for (char in word) {
14+ if (char !in current.children) {
15+ current.children[char] = TrieNode ()
16+ }
17+ current = current.children[char]!!
18+ }
19+
20+ current.isEndOfWord = true
21+ }
22+
23+ fun search (word : String ): Boolean {
24+ return searchHelper(word, 0 , root)
25+ }
26+
27+ private fun searchHelper (word : String , index : Int , node : TrieNode ): Boolean {
28+ if (index == word.length) {
29+ return node.isEndOfWord
30+ }
31+
32+ val char = word[index]
33+
34+ return if (char == ' .' ) {
35+ for (child in node.children.values) {
36+ if (searchHelper(word, index + 1 , child)) {
37+ return true
38+ }
39+ }
40+ false
41+ } else {
42+ val child = node.children[char] ? : return false
43+ searchHelper(word, index + 1 , child)
44+ }
45+ }
46+ }
Original file line number Diff line number Diff line change 1+ class Solution {
2+ fun lengthOfLIS (nums : IntArray ): Int {
3+ val tails = mutableListOf<Int >()
4+
5+ for (num in nums) {
6+ val pos = binarySearchLeftmost(tails, num)
7+
8+ if (pos == tails.size) {
9+ tails.add(num)
10+ } else {
11+ tails[pos] = num
12+ }
13+ }
14+
15+ return tails.size
16+ }
17+
18+ fun binarySearchLeftmost (list : List <Int >, target : Int ): Int {
19+ var left = 0
20+ var right = list.size
21+
22+ while (left < right) {
23+ val mid = left + (right - left) / 2
24+ if (list[mid] < target) {
25+ left = mid + 1
26+ } else {
27+ right = mid
28+ }
29+ }
30+
31+ return left
32+ }
33+ }
Original file line number Diff line number Diff line change 1+ /* *
2+ * 시간 복잡도: O(n)
3+ * 공간 복잡도: O(n)
4+ */
5+
6+ class Solution {
7+ fun isValid (s : String ): Boolean {
8+ if (s.length % 2 == 1 ) return false
9+
10+ val stack = Stack <Char >()
11+ val pairs = mapOf (' )' to ' (' , ' ]' to ' [' , ' }' to ' {' )
12+
13+ for (char in s) {
14+ when {
15+ char in pairs -> {
16+ if (stack.isEmpty() || stack.pop() != pairs[char]) {
17+ return false
18+ }
19+ }
20+
21+ else -> stack.push(char)
22+ }
23+ }
24+
25+ return stack.isEmpty()
26+ }
27+ }
You can’t perform that action at this time.
0 commit comments