listBài tập List - Nâng cao

Các bài tập về List - Nâng cao

  1. Viết hàm flatten_list làm phẳng list lồng nhau (nested list) bất kỳ độ sâu.

def flatten_list(nested_list):
    # Chuyển [1, [2, [3, 4], 5], 6] -> [1, 2, 3, 4, 5, 6]
    pass

# Test
nested = [1, [2, [3, 4], 5], 6]
flat = flatten_list(nested)
print(flat)  # [1, 2, 3, 4, 5, 6]
circle-info

Gợi ý: Dùng đệ quy hoặc stack

  1. Viết hàm chunk_list chia list thành các chunks có kích thước n.

def chunk_list(lst, chunk_size):
    # Chia list thành các nhóm
    pass

# Test
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
chunks = chunk_list(numbers, 3)
print(chunks)  # [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  1. Viết hàm rotate_list xoay list sang trái hoặc phải n vị trí.

  1. Viết hàm find_all_indices tìm tất cả vị trí của phần tử trong list.

  1. Viết hàm sliding_window tạo sliding windows từ list.

  1. Viết hàm merge_sorted_lists merge nhiều sorted lists thành một sorted list.

  1. Viết hàm list_difference tìm hiệu hai lists (phần tử có trong list1 nhưng không có trong list2).

  1. Viết hàm list_intersection_with_duplicates tìm giao của lists, giữ duplicates.

  1. Viết hàm partition_list chia list thành hai lists dựa trên điều kiện.

  1. Viết hàm longest_increasing_subsequence tìm subsequence tăng dần dài nhất.

  1. Viết hàm group_consecutive nhóm các số liên tiếp.

  1. Viết hàm run_length_encoding mã hóa Run-Length Encoding.

  1. Viết hàm cartesian_product tính tích Descartes của nhiều lists.

  1. Viết hàm permutations_custom tạo tất cả hoán vị của list (không dùng itertools).

  1. Viết hàm combinations_custom tạo tất cả tổ hợp k phần tử (không dùng itertools).

  1. Viết hàm find_majority_element tìm phần tử xuất hiện > n/2 lần.

circle-info

Gợi ý: Boyer-Moore Voting Algorithm

  1. Viết hàm two_sum tìm hai số có tổng bằng target.

  1. Viết hàm three_sum tìm ba số có tổng bằng target.

  1. Viết hàm max_subarray_sum tìm tổng lớn nhất của subarray liên tiếp.

  1. Viết hàm product_except_self tính tích của tất cả phần tử trừ phần tử tại index đó.

  1. Viết hàm find_duplicate tìm số bị trùng trong list [1..n] có n+1 phần tử.

circle-info

Gợi ý: Floyd's Cycle Detection

  1. Viết hàm sort_by_frequency sắp xếp list theo tần suất xuất hiện.

  1. Viết hàm dutch_national_flag sắp xếp list chỉ có 0, 1, 2.

  1. Viết hàm next_greater_element tìm phần tử lớn hơn tiếp theo cho mỗi phần tử.

circle-info

Gợi ý: Dùng stack

  1. Viết hàm trapping_rain_water tính lượng nước mưa có thể chứa.

  1. Viết class CircularList - list vòng (circular buffer).

  1. Viết hàm sparse_list_compress nén sparse list (nhiều giá trị giống nhau).

  1. Viết hàm list_to_tree chuyển flat list thành tree structure.

  1. Viết hàm moving_average tính moving average với window size.

  1. Viết hàm list_binary_search tìm kiếm nhị phân (không dùng built-in).

Last updated