Cấu trúc dữ liệu với Kotlin: Leetcode (P2)
Tiếp nối chuỗi các bài về kiến thức Cấu trúc dữ liệu & Giải thuật trong ngôn ngữ Kotlin chúng ta đến với các bài tập về LinkedList, Stack, Queue nhé!
LinkedList, Stack, Queue
Remove Duplicates from Sorted List
Link LeetCode: https://leetcode.com/problems/remove-duplicates-from-sorted-list/description/
class ListNode(var `val`: Int, var next: ListNode? = null)
fun deleteDuplicates(head: ListNode?): ListNode? {
if (head == null) {
return null
}
val dummyNode = ListNode(0)
dummyNode.next = head
var currentNode = head
var prevNode = dummyNode
while (currentNode != null) {
if (currentNode.next != null && currentNode.`val` == currentNode.next!!.`val`) {
while (currentNode?.next != null && currentNode?.`val` == currentNode?.next!!.`val`) {
currentNode = currentNode.next
}
prevNode.next = currentNode
}
prevNode = prevNode.next!!
currentNode = currentNode?.next
}
return dummyNode.next
}
Hướng dẫn giải bài Remove Duplicated from Sorted List bằng Kotlin – Android Mastery
Number of Students Unable to Eat Lunch
Link LeetCode: https://leetcode.com/problems/number-of-students-unable-to-eat-lunch/description
fun countStudents(students: IntArray, sandwiches: IntArray): Int {
val studentsDeque = ArrayDeque<Int>()
val sandwichesDeque = ArrayDeque<Int>()
// Convert the arrays to deques
for (student in students) {
studentsDeque.addLast(student)
}
for (sandwich in sandwiches) {
sandwichesDeque.addLast(sandwich)
}
var count = 0
while (studentsDeque.isNotEmpty()) {
if (studentsDeque.first() == sandwichesDeque.first()) {
studentsDeque.removeFirst()
sandwichesDeque.removeFirst()
count = 0
} else {
count++
studentsDeque.addLast(studentsDeque.removeFirst())
}
if (count == studentsDeque.size) {
return count
}
}
return 0
}
Hướng dẫn giải Number of Students Unable to Earn Lunch bằng Kotlin DeQueue
Set, Map
Roman to Integer
Link LeetCode: https://leetcode.com/problems/roman-to-integer/description/
fun romanToInt(s: String): Int {
val m = hashMapOf(
"I" to 1,
"IV" to 4,
"V" to 5,
"IX" to 9,
"X" to 10,
"XL" to 40,
"L" to 50,
"XC" to 90,
"C" to 100,
"CD" to 400,
"D" to 500,
"CM" to 900,
"M" to 1000
)
var res = 0
var i = 0
while (i < s.length) {
val a = if (i < s.length - 1) s.substring(i, i + 2) else ""
val b = s[i].toString()
if (m.containsKey(a)) {
res += m[a]!!
i += 2
} else {
res += m[b]!!
i++
}
}
return res
}
Hướng dẫn giải bài tập Roman to Integer bằng ngôn ngữ Kotlin – Android Mastery
Ransom Note
Link LeetCode: https://leetcode.com/problems/ransom-note/description/
fun canConstruct(ransomNote: String, magazine: String): Boolean {
val count = IntArray(26)
for (ch in magazine) {
count[ch - 'a']++
}
for (ch in ransomNote) {
val value = ch - 'a'
if (count[value] <= 0) return false
count[value]--
}
return true
}
Hướng dẫn giải Ransom Note sử dụng ngôn ngữ Kotlin – Android Mastery
Find All Numbers Disappeared in an Array
LeetCode Link: https://leetcode.com/problems/find-all-numbers-disappeared-in-an-array/description/
fun findDisappearedNumbers(nums: IntArray): List<Int> {
val list = mutableListOf<Int>()
var idx: Int
for (i in nums.indices) {
idx = if (nums[i] < 0) nums[i] * -1 - 1 else nums[i] - 1
if (nums[idx] > 0) {
nums[idx] = -nums[idx]
}
}
for (i in nums.indices) {
if (nums[i] > 0) {
list.add(i + 1)
}
}
return list
}
Hướng dẫn giải bài tập Find All Numbers Disappeared in an Array – Android Mastery
Subarray Sum Equals K
LeetCode Link: https://leetcode.com/problems/subarray-sum-equals-k/description/
fun subarraySum(nums: IntArray, k: Int): Int {
val map = HashMap<Int, Int>()
map[0] = 1
var count = 0
var sum = 0
for (num in nums) {
sum += num
count += map[sum-k] ?: 0
map[sum] = (map[sum] ?: 0) + 1
}
return count
}
Hướng dẫn giải bài tập Sub Array Sum Equals K bằng ngôn ngữ Kotlin – Android Mastery
Trên đây là các hướng dẫn giải của mình cho một số bài tập LeetCode đơn giản ứng dụng những cấu trúc dữ liệu thường dùng nhất của ngôn ngữ lập trình Kotlin. Nếu các bạn có nhu cầu tìm hiểu sâu hơn, hiểu rõ ràng hơn về các phương pháp tiếp cận đề bài, phân tích và giải thì có thể tham khảo qua khóa học Android Mastery của mình nhé. Trong khóa học này mình sẽ đi giải thích tường tận mọi kiến thức cho một người học lập trình Android từ tay mơ Kotlin đến Master Android Development.
Chúc các bạn sớm thành công với mục tiêu học tập!