Tìm tổng đường đi lớn nhất trong cây nhị phân bằng thuật toán DFS
1. Phân tích bài toán và những điểm mấu chốt
Bài toán yêu cầu tìm tổng giá trị lớn nhất của một đường đi trong cây nhị phân. Theo định nghĩa, một đường đi là một chuỗi các nút trong đó mỗi cặp nút liên tiếp đều có cạnh nối và mỗi nút chỉ xuất hiện tối đa một lần. Điều này dẫn đến hai đặc điểm quan trọng:
Điểm bắt đầu và kết thúc tự do: Đ ...
Đăng vào ngày 9 tháng 8 lúc 03:07
Giải Thuật Quay Lui và Bài Toán Kết Hợp Trên LeetCode
Giới thiệu về giải thuật quay lui
Giải thuật quay lui (backtracking) và đệ quy có mối quan hệ mật thiết với nhau. Bất cứ nơi nào có đệ quy, thường sẽ có sự quay lui, và nó thường xuất hiện ngay sau lời gọi đệ quy.
Giải thuật này thường được áp dụng để giải quyết các loại bài toán như:
Bài toán kết hợp
Bài toán chia cắt (partitioning)
Bài to ...
Đăng vào ngày 6 tháng 8 lúc 22:14
Áp Dụng Bảng Băm Trong Python: Giải Quyết Bài Toán LeetCode Thực Tế
Bảng Băm Trong Ngữ Cảnh Python
Trong Python, cấu trúc bảng băm thường được triển khai thông qua kiểu từ điển (dict). Khác với C, Python cung cấp sẵn cơ chế này như một thành phần ngôn ngữ, giúp tối ưu hóa thao tác tìm kiếm.
Tìm Cặp Số Tổng Mục Tiêu (Mức Độ Dễ)
Yêu cầu: Cho mảng số nguyên và giá trị mục tiêu, trả về chỉ số của hai số có tổng bằ ...
Đăng vào ngày 15 tháng 7 lúc 07:08
Bài tập Lập trình C: Giải các bài toán LeetCode và Luogu
Chuẩn bị cho kỳ thi kiểm tra năng lực lập trình, tôi đã bắt đầu giải các bài tập thuật toán. Ban đầu tôi không mấy hứng thú, nhưng sau khi giải được một vài bài, cảm giác đạt được thành quả rất tuyệt vời. Hôm nay tôi khá mệt nên chỉ làm một vài bài và kết thúc công việc sớm. Những ngày trước đó, tôi đã thức khuya để chuẩn bị đề cho các buổi họp ...
Đăng vào ngày 14 tháng 7 lúc 03:09
Giải bài toán LeetCode 40: Tổng hợp các tổ hợp II
Cho một tập hợp các số nguyên candidates và một số nguyên target. Tìm tất cả các tổ hợp từ candidates sao cho tổng các phần tử trong tổ hợp bằng target. Mỗi số trong candidates chỉ có thể được sử dụng một lần trong mỗi tổ hợp. Lưu ý: Kết quả không được chứa các tổ hợp trùng lặp.
Để giải quyết bài toán này, chúng ta sẽ sử dụng phương pháp quay l ...
Đăng vào ngày 13 tháng 7 lúc 17:15
Bảng băm trong LeetCode
Bảng băm
127. Chuỗi từ chuyển đổi
Bài toán
Từ điển wordList chứa một chuỗi từ beginWord đến endWord với dãy chuyển đổi được tạo theo các quy tắc sau: beginWord -> s(1) -> s(2) -> ... -> s(k):
Mỗi cặp từ kề nhau chỉ khác nhau bởi một ký tự.
Đối với 1 <= i <= k, mỗi s(i) đều nằm trong wordList. Lưu ý rằng, beginWord không cần ...
Đăng vào ngày 7 tháng 7 lúc 01:55
Giải bài toán quan hệ họ hàng bằng cấu trúc Union-Find
Bài toán yêu cầu xác định xem hai người có cùng một tổ tiên (thuộc cùng một nhóm họ hàng) hay không, dựa trên các mối quan hệ đã cho. Đây là bài toán kinh điển áp dụng cấu trúc dữ liệu Union-Find (Disjoint Set Union - DSU).
Dưới đây là cách triển khai bằng Java:
import java.util.Scanner;
public class Main {
static int[] parent;
// K ...
Đăng vào ngày 5 tháng 7 lúc 10:54
LeetCode Two Pointers Problem: Trapping Rain Water
Classic two-pointer problem on LeetCode
Initial Approach
To accumulate water, each bar must have taller bars on both sides. Additionally, the water level above a bar is determined by the shorter of the two boundary bars — that is, the minimum of the left and right max heights minus the current bar's height.
The key challenge lies in identifying ...
Đăng vào ngày 4 tháng 7 lúc 23:41
Tìm hai số xuất hiện duy nhất trong mảng
Mô tả bài toán:
Cho một mảng số nguyên nums có đúng hai phần tử chỉ xuất hiện một lần, tất cả các phần tử còn lại đều xuất hiện đúng hai lần. Hãy tìm hai phần tử đó. Bạn có thể trả về kết quả theo bất kỳ thứ tự nào.
Bạn phải thiết kế một thuật toán với độ phức tạp thời gian tuyến tính và chỉ sử dụng bộ nhớ phụ hằng số.
Ví dụ 1:
<strong> ...
Đăng vào ngày 23 tháng 6 lúc 07:02
Giải pháp chi tiết LeetCode Weekly Contest 399
Bài 1: Tổng số cặp số tốt I
Đối với bài toán này, chúng ta cần đếm số lượng cặp chỉ số (i, j) sao cho nums1[i] chia hết cho nums2[j] * k. Do giới hạn kích thước của mảng là nhỏ (n, m <= 50), chúng ta có thể sử dụng phương pháp mô phỏng trực tiếp (brute-force) bằng cách duyệt qua tất cả các cặp có thể.
class Solution {
public:
int numberO ...
Đăng vào ngày 18 tháng 6 lúc 18:25