Mô tả
Cậu ruột của Bình là một lão làng lướt sóng trên sàn giao dịch chứng khoán HNX. Mỗi chiều nghỉ chơi, lão lại ngồi phân tích bảng giá và vẽ các sóng Elliott trên biểu đồ nến. Lão quan tâm tới một chỉ báo rất quan trọng: số lần đồ thị giá đảo chiều — tức là chuyển từ trạng thái đang đi lên sang đi xuống (tạo đỉnh cục bộ) hoặc từ đang đi xuống sang đi lên (tạo đáy cục bộ). Số lần đảo chiều càng nhiều thì cổ phiếu càng nhịp nhàng và nhiều cơ hội giao dịch ngắn hạn.
Lão ruột nhờ bạn — người cháu đang học lập trình giỏi nhất nhà — viết một hàm đếm nhanh số lần đảo chiều đó. Cụ thể, bạn nhận vào một mảng các mức giá đóng cửa theo thứ tự thời gian của mã cổ phiếu PVD (mỗi phần tử là giá của một phiên giao dịch), và cần trả về tổng số lần đồ thị đổi chiều xu hướng.
Lưu ý nhỏ nhưng quan trọng: nếu giá đứng yên (đi ngang) trong một vài phiên liên tiếp thì đoạn đó không tạo ra đảo chiều và cũng không được tính là một xu hướng mới.
Đầu vào
Một mảng số nguyên prices gồm n phần tử, trong đó prices[i] là giá đóng cửa của phiên thứ i.
Đầu ra
Trả về một số nguyên duy nhất là tổng số lần đảo chiều của đồ thị.
Ràng buộc
Ví dụ
Ví dụ 1:
Đầu vào: prices = [10, 15, 15, 20, 20, 15, 10, 12, 14]
Đầu ra: 2
Giải thích: Đồ thị đi như sau:
- Từ phiên 0 đến phiên 4: đồ thị đang trong xu hướng tăng (bỏ qua hai đoạn phẳng 15→15 và 20→20).
- Tại phiên 5 (giá 15): giá bắt đầu giảm, đồ thị đảo chiều lần 1 (từ tăng sang giảm) → tạo đỉnh cục bộ tại mốc giá 20.
- Từ phiên 5 đến phiên 6: đồ thị giảm.
- Tại phiên 7 (giá 12): giá bắt đầu tăng, đồ thị đảo chiều lần 2 (từ giảm sang tăng) → tạo đáy cục bộ tại mốc giá 10.
Tổng cộng có 2 lần đảo chiều.
Ví dụ 2:
Đầu vào: prices = [8, 6, 6, 6, 7]
Đầu ra: 1
Giải thích: Đồ thị giảm (8→6), đi ngang (6→6→6), rồi tăng (6→7). Chuyển từ giảm sang tăng là 1 lần đảo chiều duy nhất.