0
0
Lập trình
Sơn Tùng Lê
Sơn Tùng Lê103931498422911686980

Hiểu Rõ Hơn Về Thuật Toán Qua Những Bài Tập Lập Trình Đơn Giản

Đăng vào 1 tháng trước

• 4 phút đọc

Chủ đề:

Algorithm

Trong thế giới lập trình, nhiều người thường nhầm lẫn rằng việc luyện tập thuật toán đồng nghĩa với việc học thuộc lòng nhiều thuật toán khác nhau. Quan niệm sai lầm này có thể dẫn đến sự chán nản và từ bỏ việc học thuật toán, điều này thật sự là một điều đáng tiếc. Để bạn có thể yêu thích lập trình và thuật toán hơn, hãy cùng khám phá một số bài tập lập trình thú vị, dễ thực hiện, không yêu cầu kiến thức quá sâu về thuật toán nhưng lại giúp bạn nắm bắt được những khía cạnh quan trọng trong lập trình.

Tất cả các bài có liên kết để bạn có thể gửi mã nguồn và xem kết quả. Đừng quên tự mình trải nghiệm làm bài trước khi xem giải thích. Nếu không tham gia, bạn có thể sẽ không học được gì mới. Thậm chí nếu bạn nghĩ rằng vấn đề rất dễ, vẫn có thể bạn sẽ chạm phải những sai lầm. 🤭

Bài Tập Lập Trình Gợi Ý

Dưới đây là một số bài tập lập trình có thể giúp bạn cải thiện khả năng tư duy và hiểu biết về thuật toán:

Leetcode 1688: Số Trận Đấu Trong Giải Đấu

Liên kết: Leetcode 1688

Bạn sẽ được đưa vào một giải đấu với n đội. Luật chơi là:

  • Nếu số đội là số chẵn, mỗi đội sẽ được ghép cặp và tổng số trận đấu là n / 2.
  • Nếu số đội là số lẻ, một đội sẽ thắng mà không cần thi đấu, và số trận đấu là (n - 1) / 2.

Hãy tính tổng số trận đấu diễn ra cho đến khi có đội chiến thắng. Ví dụ, nếu n = 7, tổng số trận đấu là 6.

Giải pháp bằng Python:

python Copy
class Solution:
    def numberOfMatches(self, n: int) -> int:
        matches = 0
        while n > 1:
            if n % 2 == 0:
                matches += n // 2
                n = n // 2
            else:
                matches += (n - 1) // 2
                n = ((n - 1) // 2) + 1
        return matches

Leetcode 1332: Loại Bỏ Dãy Con Đối Xứng

Liên kết: Leetcode 1332

Cho một chuỗi s chỉ gồm các ký tự 'a' và 'b'. Lợi dụng việc loại bỏ dãy con, hãy trả về số bước tối thiểu để làm cho chuỗi trở nên rỗng.

Ví dụ:

  • Với s = 'abb', bạn sẽ loại bỏ 'a' và sau đó 'bb' trong tổng cộng 2 bước.

Giải pháp:

python Copy
class Solution:
    def removePalindromeSub(self, s: str) -> int:
        return 1 if s == s[::-1] else 2

Leetcode 1460: Đưa Hai Mảng Thành Một Qua Đảo Ngược Subarray

Liên kết: Leetcode 1460

Bạn có hai mảng targetarr. Nếu bạn có thể biến đổi arr thành target bằng cách đảo ngược các đoạn con của arr, hãy trả về true, ngược lại false.

Giải pháp bằng Python:

python Copy
class Solution:
    def canBeEqual(self, target: List[int], arr: List[int]) -> bool:
        return Counter(arr) == Counter(target)

Leetcode 1700: Số Học Sinh Không Ăn Được Bữa Trưa

Liên kết: Leetcode 1700

Với số học sinh và loại bánh sandwich, hãy trả về số học sinh không thể ăn được. Quá trình học sinh sẽ lấy bánh nếu thích, nếu không sẽ trở lại cuối hàng.

Giải pháp:

python Copy
class Solution:
    def countStudents(self, students: List[int], sandwiches: List[int]) -> int:
        count_students = [0, 0]
        for i in students:
            count_students[i] += 1
        not_eat = len(students)
        for i in sandwiches:
            if count_students[i] > 0:
                count_students[i] -= 1
                not_eat -= 1
            else:
                break
        return not_eat

Kết Luận

Những bài tập trên có thể giúp bạn nhận thức rõ hơn về thuật toán và tạo động lực cho việc học tập của bạn. Việc hiểu rõ vấn đề và tìm giải pháp thích hợp là rất quan trọng hơn là chỉ đơn thuần học thuộc lòng. Hãy thường xuyên thực hành và nâng cao kỹ năng lập trình của mình để có thể giải quyết các vấn đề phức tạp hơn trong tương lai.
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào