Câu hỏi:
11/05/2023 135Chỉnh sửa nâng cấp chương trình của nhiệm vụ thực hành để đưa ra kết quả là vùng các phần tử có giá trị bằng C của dãy gốc, tức là yêu cầu đưa ra chỉ số đầu, chỉ số cuối và số lượng phần tử của vùng có giá trị bằng C.
Ví dụ nếu A = [0, 1, 2, 2, 2, 2, 4, 5, 5, 6], C = 2, thì kết quả trả lại là 2, 5, 4.
Sách mới 2k7: Tổng ôn Toán, Lí, Hóa, Văn, Sử, Địa…. kỳ thi tốt nghiệp THPT Quốc gia 2025, đánh giá năng lực (chỉ từ 110k).
Quảng cáo
Trả lời:
- Chương trình trả về ba giá trị start, end và count, tương ứng với chỉ số đầu tiên, chỉ số cuối cùng và số lượng phần tử của vùng có giá trị bằng C trong dãy A.
- Trong trường hợp không tìm thấy C trong dãy A, chương trình trả về -1, -1, 0.
- Nếu giá trị tại vị trí mid bằng C, ta sử dụng hai biến start và end để tìm ra chỉ số đầu tiên và cuối cùng của vùng có giá trị bằng C. Sau đó, ta trả về giá trị start + 1, end - 1 và end - start - 1.
- Nếu giá trị tại vị trí mid nhỏ hơn C, ta tiếp tục tìm kiếm phần tử có giá trị bằng C ở nửa bên phải của dãy A.
- Nếu giá trị tại vị trí mid lớn hơn C, ta tiếp tục tìm kiếm phần tử có giá trị bằng C ở nửa bên trái của dãy A.
Ví dụ chạy thử chương trình:
Thu được kết quả:
CÂU HỎI HOT CÙNG CHỦ ĐỀ
Câu 1:
Cho một dãy số bất kì (chưa được sắp xếp) và một số K, hãy tìm số lần xuất hiện của K trong dãy số trên. Yêu cầu sử dụng phương pháp chia để trị.
Câu 2:
Cho trước dãy số A đã sắp xếp theo thứ tự tăng dần, cho trước hằng số C. Cần thiết lập hai hàm sau bằng kĩ thuật chia để trị:
– Hàm firstInd(A, left, right, C) sẽ tìm chỉ số của phần tử đầu tiên của dãy A có giá
trị bằng C. Nếu không sẽ trả về -1.
– Hàm lastInd(A, left, right, C) sẽ tìm chỉ số của phần tử cuối cùng của dãy A có giá trị bằng C. Nếu không thấy sẽ trả về – 1.
Từ hai hàm đã thiết kế trên, đưa ra một cách giải khác cho bài toán trong nhiệm vụ 1. Lời giải này có độ phức tạp O(logn).
Câu 3:
Cho một dãy số nguyên được sắp xếp theo thứ tự tăng dần, hãy tìm một vị trí thứ i trong dãy sao cho phần tử thứ i có giá trị bằng i.
Câu 4:
Cho một dãy số A bất kì. Để xác định một số C cho trước xuất hiện trong dãy A bao nhiều lần thì làm thế nào?
về câu hỏi!