Giả sử có một người đạp xe đi chuyến đường dài. Có n điểm khác nhau ở các độ cao khác nhau. Người đạp xe bắt đầu từ điểm 0 với độ cao 0. Nếu ta có dãy gain với n phần tử, gain[i] là tăng giảm độ cao giữa điểm i và i+1 cho mọi 0 <= i < n. Ta phải tìm độ cao cao nhất của một điểm.
Ví dụ: gain = [-4,2,6,1,-6], kết quả là 5 vì các độ cao lần lượt là [0,-4,-2,4,5,-1], max = 5.
Giải thuật
maximum := 0run_alt := 0- Với mỗi
deltatronggain:run_alt += deltamaximum := max(maximum, run_alt)
- Trả về
maximum
Ví dụ (Python)
def solve(gain):
maximum = 0
run_alt = 0
for delta in gain:
run_alt += delta
maximum = max(maximum, run_alt)
return maximum
gain = [-4, 2, 6, 1, -6]
print(solve(gain))
Input
[-4,2,6,1,-6]
Output
5