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

Tìm mặt hàng gần ngưỡng từ phía dưới

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

Giữ ứng viên tốt nhất đã gặp

Với ngưỡng giả định `K = 1150`, cần tìm mặt hàng có doanh số **nhỏ hơn K nhưng lớn nhất trong các số thỏa điều kiện**. Trong dãy mẫu, Na 1100 là đáp án; Táo 1200 tuy cách K chỉ 50 nhưng **ở phía trên**, nên không được chọn. Có thể tách đây thành mô-đun mới: nhận hai dãy tên/doanh số và K; duyệt từng cặp, giữ ứng viên hợp lệ có doanh số lớn hơn ứng viên cũ. Nếu không có doanh số nào nhỏ hơn K thì báo không có. Khi nhiều mặt hàng cùng doanh số tốt nhất, cách duyệt dưới đây giữ mặt hàng gặp đầu tiên.

Mã tìm kiếm tuần tự

```python def gan_duoi_nguong(P, S, K): if len(P) != len(S): raise ValueError("Hai dãy phải cùng độ dài") vi_tri = None for i in range(len(S)): if S[i] < K and (vi_tri is None or S[i] > S[vi_tri]): vi_tri = i if vi_tri is None: return None return P[vi_tri], S[vi_tri] P = ["Táo", "Mơ", "Lê", "Cam", "Ổi", "Na"] S = [1200, 900, 1000, 1500, 700, 1100] print(gan_duoi_nguong(P, S, 1150)) ``` Kết quả là `('Na', 1100)`. Hàm chỉ cần một lượt qua dãy, nên bậc thời gian `O(n)`. Nếu dữ liệu **đã sắp theo doanh số**, có thể dùng tìm kiếm nhị phân để tìm ranh giới dưới K; điều kiện đã sắp phải được kiểm hoặc bảo đảm trước.

Bài luyện

Với ngưỡng `K=1150` và dữ liệu mẫu, mặt hàng nào gần K nhất từ phía dưới?
Chọn một đáp án

Bài luyện

Nếu không có doanh số nào nhỏ hơn K, hàm `gan_duoi_nguong` trả gì?
Chọn một đáp án

Bài luyện

Khi nào có thể cân nhắc tìm kiếm nhị phân thay cho duyệt tuần tự ở bài này?
Chọn một đáp án

Đang học