Các Bài Tập LeetCode: Phân Tách Chuỗi Hồi Văn, Chèn Vị Trí, Tìm Kiếm Ma Trận

Phân Tách Chuỗi Hồi Văn Sử dụng hai hàm: một để kiểm tra chuỗi có phải là hồi văn hay không, và một để thực hiện thuật toán quay lui. class Solution: def kiemTraHoiVan(self, chuoi): return chuoi == chuoi[::-1] def quyLui(self, chuoi, viTriBatDau, duongDiHienTai, ketQua): if viTriBatDau >= len(chuoi): ketQua ...

Đăng vào ngày 18 tháng 6 lúc 06:25

Phân phối Kẹo, Tách Từ II, Điểm Tối Đa Trên Một Đường Thẳng

Bài viết này trình bày các giải pháp cho ba bài toán LeetCode: 135. Phân phối Kẹo, 140. Tách Từ II và 149. Điểm Tối Đa Trên Một Đường Thẳng. 135. Phân phối Kẹo Bài toán yêu cầu phân phối kẹo cho các trẻ em dựa trên xếp hạng của họ sao cho mỗi trẻ em nhận được ít nhất một viên kẹo và trẻ em có xếp hạng cao hơn phải nhận được nhiều kẹo hơn trẻ e ...

Đăng vào ngày 13 tháng 6 lúc 05:09

Giải thuật xử lý danh sách liên kết: Đảo ngược, hợp nhất và phát hiện chu trình

Đảo ngược danh sách liên kết Một cách hiệu quả để đảo ngược danh sách liên kết là sử dụng kỹ thuật chèn đầu. Ta duyệt qua từng nút trong danh sách gốc, tách từng nút ra và chèn vào đầu danh sách mới. Trong quá trình này, cần lưu trữ con trỏ đến nút kế tiếp trước khi thay đổi liên kết. struct ListNode* reverseList(struct ListNode* head) { s ...

Đăng vào ngày 12 tháng 6 lúc 20:14

Xác Suất Tồn Tại Của Mã Tế Sau K Bước Di Chuyển Trên Bàn Cờ

Bài toán: 688. Xác suất tồn tại của mã tế trên bàn cờ Cách tiếp cận: Có tối đa k * n * n trạng thái, đáp ứng yêu cầu về thời gian. Phương pháp 1: Đệ quy + Tìm kiếm theo chiều sâu (DFS). Độ phức tạp thời gian là O(k * n²), chi tiết xem trong chú thích. Phiên bản C++: class Solution { public: // tám hướng di chuyển int huongDiChuyenX[8]={ ...

Đăng vào ngày 5 tháng 6 lúc 23:10

Các bài toán xử lý danh sách liên kết trên LeetCode

21. Gộp hai danh sách liên kết đã sắp xếp Cho hai danh sách liên kết tăng dần, hãy gộp chúng thành một danh sách mới cũng theo thứ tự tăng dần. ListNode* merge(ListNode* a, ListNode* b) { if (!a) return b; if (!b) return a; if (a->val < b->val) { a->next = merge(a->next, b); return a; } else { ...

Đăng vào ngày 2 tháng 6 lúc 21:43

Giải bài LeetCode 1934: Tính tỷ lệ xác nhận người dùng

Cho hai bảng dữ liệu như sau: Bảng: Signups +----------------+----------+ | Tên cột | Kiểu | +----------------+----------+ | user_id | int | | time_stamp | datetime | +----------------+----------+ user_id là khóa chính. Mỗi hàng ghi lại thời điểm đăng ký của một người dùng. Bảng: Confirmations +----------------+ ...

Đăng vào ngày 2 tháng 6 lúc 02:44

Kiểm tra số đối xứng bằng toán học không dùng chuỗi

Đề bài Cho một số nguyên x, hãy xác định xem nó có phải là số đối xứng hay không. Một số được gọi là đối xứng nếu đọc từ trái sang phải hay từ phải sang trái đều cho cùng một giá trị. Ví dụ: 121 là số đối xứng, trong khi 123 thì không. Ví dụ minh họa Ví dụ 1: Đầu vào: x = 121 Đầu ra: true Ví dụ 2: Đầu vào: x = -121 Đầu ...

Đăng vào ngày 30 tháng 5 lúc 00:48

Giải quyết các bài toán thuật toán phổ biến bằng kỹ thuật Hai con trỏ

Kỹ thuật hai con trỏ (Two-Pointer) là một trong những phương pháp tối ưu nhất để xử lý các bài toán trên mảng hoặc chuỗi. Thay vì sử dụng các vòng lặp lồng nhau gây tốn kém về thời gian (O(n²)), hai con trỏ giúp đưa độ phức tạp về O(n). Dưới đây là cách áp dụng kỹ thuật này vào các bài toán thực tế. 1. Loại bỏ phần tử (LeetCode 27) Bài toán yê ...

Đăng vào ngày 17 tháng 5 lúc 21:51