Giới thiệu về lớp học + cách luyện thuật toán trên Leetcode
Hình thức: Video **Nội dung:** - Giảng viên giới thiệu về lớp học Leetcode, từ nội dung đến cách thức lập trình trên Leetcode. **Chi tiết:** - Giới thiệu về Lớp học Leetcode - Lời chào từ giảng viên - Một số chú ý của lớp học - Ngôn ngữ lập trình chính của khóa học - Hướng dẫn công cụ lập trình - Hướng dẫn làm bài tập - Hướng dẫn sử dụng Leetcode **Bài tập:** Bài tập làm quen với Leetcode.
Đào sâu vào phân tích thuật toán
Hình thức: Video
Phân tích thuật toán là một trong những kỹ năng quan trọng để đánh giá tốc độ của dòng code mà chúng ta viết.
Trong bài này chúng ta cùng tìm hiểu khái niệm BigO, cách tìm BigO của một thuật số thuật toán phổ thông.
Chi tiết:
- Giới thiệu về buổi học BigO
- Thuật toán và BigO
- Đào sâu vào phân tích thuật toán
- O(1)
- Mối quan hệ tuyến tính
- Mối quan hệ bậc hai
- Mối quan hệ Logarit
- Cách rút gọn BigO
- Luyện tập đánh giá độ phức tạp
- Chứng minh công thức BigO
- Độ phức tạp bài tập Two Sum
Chuỗi - String
Hình thức: Video
Chuỗi là một trong những cấu trúc dữ liệu vô cùng quan trọng giúp lưu trữ văn bản.
Trong bài học này chúng ta cùng tìm hiểu cách tiếp cận một bài thuật toán liên quan tới chuỗi.
Chi tiết nội dung:
- Vì sao xử lý chuỗi quan trọng?
- Đảo ngược chuỗi sử dụng vòng For
- Đảo ngược chuỗi sử dụng 2 con trỏ
- Leetcode 345 - Đảo ngược nguyên âm trong chuỗi
- Chuỗi Palindrome
- Khái niệm chuỗi con và dãy con
- Kỹ thuật đếm
Các dạng bài Leetcode thường gặp:
- Đảo ngược chuỗi
- Chuỗi Palindrome
- Phát hiện nguyên âm
- Bài toán đếm sử dụng mảng đếm
Chữa bài tập phân tích thuật toán
Hình thức: Zoom
Nội dung: Giảng viên giải đáp thắc mắc về bài tập phân tích thuật toán cũng như lý thuyết bài tập chuỗi.
Mảng - Array
Mảng trong Python giúp chúng ta lưu trữ nhiều kiểu dữ liệu liền nhau theo thứ tự.
Chi tiết:
- Giới thiệu về mảng
- Kỹ thuật sử dụng tổng dồn / tích dồn
- Ma trận
- Xoay ma trận với độ phức tạp không gian thêm O(1)
Một số dạng Leetcode hay gặp:
- Bài tập tìm 2 hoặc 3 phần tử có tổng bằng K cho trước
- Làm việc với ma trận 2 chiều
- Các bài toán tổng dồn / tích dồn
- Bài tập phần tử lặp lại, phần tử biến mất và phép tối ưu sao cho độ phức tạp không gian thấp.
Hai con trỏ - Two Pointers
Kỹ thuật 2 con trỏ là một trong những kỹ thuật điển hình để tìm ra mảng con/ chuỗi con thỏa mãn một điều kiện cho trước.
Chi tiết:
- Giới thiệu kỹ thuật hai con trỏ
- Cách phát hiện những bài toán có thể áp dụng hai con trỏ
- Bài toán tìm mảng con có tổng bằng K
- So sánh thuật toán thường và hai con trỏ
Một số dạng Leetcode hay gặp:
- Chuỗi con / Mảng con thỏa mãn một điều kiện cho trước
- Chuỗi con / Mảng con ngắn/ dài nhất thỏa mãn một điều kiện cho trước
Chữa bài tập Chuỗi + Mảng
Ngăn xếp và Hàng đợi - Stack & Queue
Ngăn xếp có rất nhiều ứng dụng trong tiền xử lý trong trí tuệ nhân tạo.
Các hệ thống chat real time sử dụng hàng đợi để xây dựng cơ chế truyền tải tin nhắn.
Trong bài học này chúng ta cùng rút ra một số quy luật khi gặp dạng bài Leetcode này.
- Dạng bài kiểm tra chuỗi
- Dạng bài duỗi / nén chuỗi
- Dạng bài tìm phần tử trước và sau các phần tử trong mảng thỏa mãn một điều kiện cho trước
Video | Slide | Notebook
Đệ quy
Cùng tìm cách học đệ quy một cách dễ hình dung nhất.
Chi tiết:
- Giới thiệu đệ quy
- Đệ quy chiều xuôi
- Đệ quy chiều ngược
- Quy tắc đệ quy
Chữa bài hai con trỏ + ngăn xếp
Chữa các bài tập
- Hai con trỏ: Leetcode 845 + 3 + 1234
- Ngăn xếp: Leetcode 856 + 739 + 503
Thuật toán sắp xếp - Giải thuật tham lam
Giải thuật tham lam
Đôi khi chúng ta sử dụng giải thuật giam lam trong lập trình mà không hề hay biết.
Ví dụ mua chanh là một trong ví dụ dễ hiệu để mô tả thuật toán này. Khi học xong thuật toán này bạn có thể xử lý được những dạng bài Leetcode như sau:
- Các bài toán tối ưu sắp xếp công việc và thời gian
- Các bài tạo chuỗi / mảng theo một điều kiện cho trước
Video | Slide | Notebook
Đống - Heap
Heap là một cấu trúc dữ liệu đặc biệt được thiết kế để tối ưu tính toán một số bài toán cụ thể sau.
- Bài toán tìm K phần tử thỏa mãn một điều kiện với chi phí thấp nhất
- Bài toán sắp xếp dựa trên trọng số
Video | Slide | Notebook
Đồ thị - Graph
Nếu bạn có thắc mắc mạng xã hội làm sao có thể đề xuất bạn chung cho bạn, thì đồ thị chính là một trong những mấu chốt mà bạn cần học.
Trong bài học này chúng ta sẽ cùng sử dụng đồ thị để giải một số bài tập thú vị:
- Bài tập tìm chủ làng
- Bài tập trồng hoa
Video | Slide | Notebook
Chữa bài đệ quy + sắp xếp + giải thuật tham lam
Chữa bài Leetcode
- Sắp xếp + tham lam: 1333 + 252 + 56 + 253 + 1710 + 121
Thuật toán BFS
Tìm đường ngắn nhất trong đồ thị là một trong những dạng bài tập có rất nhiều câu hỏi Leetcode liên quan.
Khi bạn học kỹ các dạng bài sau bạn sẽ hiểu tường tận được thuật toán này
- Tìm đường thỏa mãn một điều kiện K cho trước
- Kiểm tra đường
- Các bài toán tìm đường trong ma trận
Video | Slide | Notebook
Thuật toán DFS
Bên cạnh thuật toán tìm đường ngắn nhất, thuật toán tìm đường DFS hữu ích trong một số bài toán cụ thể khi bạn có thể lợi dụng tính chất của đệ quy để viết code ngắn gọn hơn.
Tuy nhiên để kiểm soát được thuật toán đệ quy cần có một cách tiếp cận chặt chẽ. Bạn sẽ học được kỹ năng đó trong bài học này.
- Bài toán liên quan đến tìm diện tích một vùng trong ma trận
- Tìm đường thỏa mãn một điều kiện K cho trước
- Bài toán kiểm tra chu trình trong đồ thị
- Dạng bài tô màu đồ thị
Video | Slide | Notebook
Chữa bài Heap + Đồ thị
Chữa bài Heap: 692 + 1054 + 767 + 857
Chữa bài đồ thị: 1042
Thuật toán Dijkstra
Nếu bạn thắc mắc tính năng tìm đường trên Google Maps đã từng hoạt động như thế nào, thì thuật toán Dijkstra chính là câu trả lời cho bạn.
Video | Slide | Notebook
Cấu trúc dữ liệu Union Find
Một cấu trúc dữ liệu giúp ta có thể phân cụm các phần tử có kết nối với nhau trong đồ thị.
Đây là một trong những cấu trúc mạnh mẽ giúp giải quyết nhiều bài toán thú vị bao gồm
- Bài toán tìm nhóm / kết nối thừa
Video | Slide | Notebook
Chữa bài tập BFS + DFS
Toán học
Làm việc với các phép tính toán lớn yêu cầu bạn cần hiểu một số định luật cơ bản.
Một số dạng Toán sẽ giải quyết
- Các bài toán liên quan tới phép chia có dư
- Bài toán liên quan đến đồng hồ
- Bài toán đồng biến nghịch biến của hàm số
Video | Slide | Notebook
Cây - Tree
Một trong web chúng ta sử dụng hàng ngày được lưu trữ dưới dạng cây. Hiểu được cấu trúc này bạn sẽ vượt qua rất nhiều thử thách hóc búa từ các công ty công nghệ lớn.
Các dạng bài sẽ giải quyết trong bài học này
Bài toán duyệt/tạo/thay đổi cây Bài toán liên quan đến khoảng cách trong cây
Video | Slide | Notebook
Tìm kiếm nhị phân - Binary Search
Một kỹ thuật tìm kiếm loại trừ hiệu quả trong một số bài toán tối ưu mà bạn cần quan tâm.
Các dạng bài sẽ giải quyết:
- Bài toán tối ưu theo điều kiện K cho trước (Trọng lượng tàu ít nhất để vận chuyển hàng trong D ngày)
- Bài toán tìm kiếm theo một điều kiện K cho trước
Video | Slide | Notebook
Chữa bài Dijkstra + Union Find
Bài Dijkstra: 743
Bài Union Find: 684 + 1319 + 1579
Cây tìm kiếm nhị phân - Binary Search Tree
Dạng cây rất hay bắt gặp trong các bài phỏng vấn. Trong bài này chúng ta cùng tìm hiểu các thao tác cơ bản trên cây này nhé.
Video | Slide | Notebook
Danh sách liên kết - Linked List
Nếu bạn muốn xóa một phần tử khỏi mảng trong thời gian ngắn thì danh sách liên kết chính là một cấu trúc dữ liệu có thể bạn cần.
Sử dụng danh sách liên kết để giải quyết một số bài toán sau:
- Thay đổi node trong danh sách liên kết
- Tạo/duyệt danh sách liên kết
Video | Slide | Notebook
Chữa bài toán + gợi ý các bài cây
Chữa các bài tập toán bao gồm:
1344 + 1217 + 1716 + 360
Gợi ý các bài liên quan tới cây.
Quy hoạch động cơ bản - Knapsack
Tìm ra lựa chọn tối ưu trong nhiều lựa chọn khác nhau là mục tiêu của thuật toán này. Tuy nhiên các bài toán ứng dụng được thuật toán này đôi khi ẩn sâu trong nhiều dạng khác nhau mà cần một vài biến đổi trước khi áp dụng được ngay.
Trong bài học này chúng ta sẽ đề cập đến những dạng mà có thể quy về bài toán Knapsack quen thuộc.
Video | Slide | Notebook
Ứng dụng quy hoạch động trong trí tuệ nhân tạo
Chúng ta hoàn toàn có thể ứng dụng lập trình quy hoạch động trong một phần bài toán nhận diện âm thanh.
Cùng khám phá ứng dụng này nhé.
Video | Slide | Notebook
Chữa bài cây nhị phân + Tìm kiếm nhị phân