Quay lại danh sách thử thách
Dễ 0 đã giải Tỷ lệ chấp nhận 0%

Trung vị của một danh sách

Tìm giá trị ở giữa của một danh sách sau khi sắp xếp.

Bạn sẽ học được gì

  • Sắp xếp danh sách và tìm phần tử giữa
  • Xử lý độ dài chẵn và lẻ
  • Lấy trung bình hai giá trị ở giữa

Đề bài

Xem bản gốc (English)

Sắp xếp các giá trị theo thứ tự tăng dần. Nếu số lượng giá trị là lẻ, lấy giá trị ở giữa. Nếu là chẵn, lấy trung bình cộng của hai giá trị ở giữa. Bài toán này chỉ chấp nhận danh sách không rỗng.

Cài đặt hàm median_number(numbers).

Đầu vào

numbers: Danh sách các giá trị không rỗng.

Đầu ra

Trả về trung vị dưới dạng một số; kết quả có thể kết thúc bằng .5.

Ràng buộc

1 ≤ độ dài danh sách ≤ 100.000. Mỗi giá trị là một số nguyên trong khoảng từ −1.000.000.000 đến 1.000.000.000.

Ví dụ

Ví dụ 1
Đầu vào:
numbers = [2, 8, 4, 10]

Kết quả mong đợi:
expected = 6.0
Đầu vào:
std::vector<long long> numbers = {2, 8, 4, 10};

Kết quả mong đợi:
double expected = 6.0;
Đầu vào:
long[] numbers = new long[] {2, 8, 4, 10};

Kết quả mong đợi:
double expected = 6.0;

Giải thích

Thứ tự sau khi sắp xếp là 2, 4, 8, 10. Cặp ở giữa có trung bình cộng là (4 + 8) / 2 = 6.

Ví dụ 2
Đầu vào:
numbers = [9, 1, 4]

Kết quả mong đợi:
expected = 4.0
Đầu vào:
std::vector<long long> numbers = {9, 1, 4};

Kết quả mong đợi:
double expected = 4.0;
Đầu vào:
long[] numbers = new long[] {9, 1, 4};

Kết quả mong đợi:
double expected = 4.0;

Giải thích

Thứ tự sau khi sắp xếp là 1, 4, 9, giá trị ở giữa là 4.

Hướng tiếp cận

Hãy tự thử trước, sau đó mở từng gợi ý một.

Gợi ý 1

Trung vị phụ thuộc vào thứ tự sau khi sắp xếp, nên vị trí trong mảng đã sắp mới là quan trọng.

Gợi ý 2

Sau khi sắp xếp, lấy phần tử giữa nếu độ dài lẻ, hoặc kết hợp hai phần tử giữa nếu độ dài chẵn.

Gợi ý 3

Cẩn thận giữ phần thập phân khi lấy trung bình hai giá trị giữa, vì kết quả có thể là .5.

Độ phức tạp mong đợi

thời gian O(n log n), bộ nhớ phụ O(n)

Tham khảo

Thử thách này đã được điều chỉnh cho CodeUtility. Hãy làm theo đề bài và các ràng buộc ở trên.

Học hỏi từ người khác

Giải pháp cộng đồng

Chưa có giải pháp nào được chia sẻ. Hãy giải thử thách này để đăng giải pháp đầu tiên.