btvn.vn
Tìm kiếm Đăng nhập

Phát hiện một giá trị đã xuất hiện trước đó

Lưu trên thiết bị này
Kĩ thuật lập trình — CS · Chọn bài khác

Chỉ cần tìm thấy một lần lặp

Bài toán hỏi dãy có **ít nhất hai vị trí khác nhau mang cùng một giá trị** hay không. Với từng chỉ số `i`, chỉ cần hỏi `a[i]` đã có trong đoạn đứng trước `a[:i]` chưa. Nếu có, trả `True` ngay; nếu hết dãy vẫn không thấy, trả `False`. Cách này không cần tạo dãy số lần xuất hiện. Ví dụ `[7, 4, 7]` trả `True` ở lần xét số 7 cuối, còn `[7, 4, 9]` trả `False`.

Kiểm phần trước, không tự so với chính mình

```python def co_gia_tri_lap(a): for i in range(len(a)): if a[i] in a[:i]: return True return False print(co_gia_tri_lap([7, 4, 7])) print(co_gia_tri_lap([7, 4, 9])) ``` Hai kết quả là `True` và `False`. Ở `i = 0`, `a[:0]` rỗng nên chưa có phần tử cũ. Với dãy rỗng hoặc một phần tử, không thể có cặp lặp, hàm trả `False`. Dùng `a[:i]` để lấy phần đứng trước; nếu kiểm `a[i] in a` thì luôn đúng vì chính phần tử đang xét có trong `a`.

Bài luyện

`co_gia_tri_lap([6, 2, 6])` trả gì?
Chọn một đáp án

Bài luyện

Vì sao kiểm `a[i] in a` không giải được bài toán phát hiện lặp?
Chọn một đáp án

Bài luyện

Với dãy rỗng, hàm `co_gia_tri_lap` trả gì?
Chọn một đáp án

Đang học