Cấu trúc dữ liệu với Kotlin: Thực hành Leetcode (P1)
Trong bài viết này chúng ta sẽ thực hiện giải các bài tập Leetcode level easy, medium liên quan đến chủ đề Array, String. Đây là các dạng cấu trúc dữ liệu rất thường được sử dụng trong quá trình phát triển ứng dụng Android. Bạn hãy học thật kỹ nhé!
Array, String
Longest Common Prefix
https://leetcode.com/problems/longest-common-prefix/description/
LeetCode Practice
fun longestCommonPrefix(strs: List<String>): String {
if (strs.isEmpty()) return ""
if (strs.size == 1) return strs[0]
val firstStr = strs[0]
var ret = ""
for (i in firstStr.indices) {
var fullMatched = true
for (j in 1 until strs.size) {
if (strs[j].length <= i || strs[j][i] != firstStr[i]) {
fullMatched = false
break
}
}
if (fullMatched) {
ret += firstStr[i]
} else {
break
}
}
return ret
}
Merge Sorted Array
https://leetcode.com/problems/merge-sorted-array/description
LeetCode Practice
fun merge(nums1: IntArray, m: Int, nums2: IntArray, n: Int) {
var i = n + m - 1
var i1 = m - 1
var i2 = n - 1
while (i1 >= 0 && i2 >= 0) {
if (nums1[i1] < nums2[i2]) {
nums1[i] = nums2[i2]
i2--
} else {
nums1[i] = nums1[i1]
i1--
}
i--
}
while (i2 >= 0) {
nums1[i2] = nums2[i2]
i2--
}
println(nums1.toList())
}
Best Time To Buy Sell Stock II
https://leetcode.com/problems/best-time-to-buy-and-sell-stock-ii
LeetCode Practice
fun maxProfit(prices: IntArray): Int {
if (prices.size < 2) return 0
var buyPrice = prices[0]
var state = 0 // 0 is idle, 1 is holding
var profit = 0
for (i in 1 until prices.size) {
if (state == 0) {
if (buyPrice < prices[i]) {
state = 1
} else {
buyPrice = prices[i]
}
} else {
if (prices[i] < prices[i - 1]) {
profit += (prices[i - 1] - buyPrice)
buyPrice = prices[i]
state = 0
}
}
}
if (state == 1) {
profit += (prices.last() - buyPrice)
}
return profit
}