diff --git a/best-time-to-buy-and-sell-stock/Real-Reason.kt b/best-time-to-buy-and-sell-stock/Real-Reason.kt new file mode 100644 index 000000000..99b358291 --- /dev/null +++ b/best-time-to-buy-and-sell-stock/Real-Reason.kt @@ -0,0 +1,15 @@ +package leetcode_study + +import kotlin.math.max +import kotlin.math.min +fun maxProfit(prices: IntArray): Int { + var minPrice = prices[0] + var maxProfit = 0 + + for (i in 0 until prices.size) { + maxProfit = max(maxProfit, prices[i] - minPrice) + minPrice = min(minPrice, prices[i]) + } + + return maxProfit +} diff --git a/group-anagrams/Real-Reason.kt b/group-anagrams/Real-Reason.kt new file mode 100644 index 000000000..58ec9058e --- /dev/null +++ b/group-anagrams/Real-Reason.kt @@ -0,0 +1,13 @@ +package leetcode_study + +fun groupAnagrams(strs: Array): List> { + val anagrams = HashMap>() + strs.forEach { str -> + val chars = str.toCharArray().sorted().toString() + anagrams.putIfAbsent(chars, mutableListOf()) + val words = anagrams[chars] + words?.add(str) + } + + return anagrams.values.toList() +} diff --git a/implement-trie-prefix-tree/Real-Reason.kt b/implement-trie-prefix-tree/Real-Reason.kt new file mode 100644 index 000000000..dd6a69657 --- /dev/null +++ b/implement-trie-prefix-tree/Real-Reason.kt @@ -0,0 +1,59 @@ +package leetcode_study + +class FirstSolution { + private val document = hashSetOf() + + fun insert(word: String) { + document.add(word) + } + + fun search(word: String): Boolean { + return document.contains(word) + } + + fun startsWith(prefix: String): Boolean { + val word = document.firstOrNull { it.startsWith(prefix) } + return word != null + } +} + +class SecondSolution { + class Document(var end: Boolean = true) { + val items = hashMapOf() + } + + private val document = Document(end = true) + + fun insert(word: String) { + var node = document + for (char in word) { + if (char !in node.items) { + node.items[char] = Document(end = false) + } + node = node.items[char]!! + } + node.end = true + } + + fun search(word: String): Boolean { + var node = document + for (char in word) { + if (char !in node.items) { + return false + } + node = node.items[char]!! + } + return node.end + } + + fun startsWith(prefix: String): Boolean { + var node = document + for (char in prefix) { + if (char !in node.items) { + return false + } + node = node.items[char]!! + } + return true + } +}