Giả sử chúng ta đưa ra một mảng đầu vào của số nguyên, làm thế nào để tìm ra dãy con lồi dài nhất thỏa mãn các điều kiện sau đây:dãy lồi dài nhất trong một mảng
c[i] < (c[i-1] + c[i+1])/2
c[i-1]
, c[i]
và c[i+1]
ba yếu tố liên tiếp trong sau đó.
Ví dụ: nếu mảng đầu vào là { 1, 2, -1, 0, 3, 8, 5 }
, thì con lồi dài nhất sẽ là: { 1, -1, 0, 3, 8 }
hoặc { 2, -1, 0, 3, 8 }
.
Tôi đã cố gắng giải quyết vấn đề này bằng cách sử dụng cùng ý tưởng lập trình động trong bài toán "Hậu quả gia tăng dài nhất" (LIS). Nhưng vì mỗi phần tử trong chuỗi phụ thuộc vào hai phần tử trước, có vẻ như một giải pháp O (n^2) là không thể. Cảm ơn sự giúp đỡ của bạn.
Điều này có thể được thực hiện trong O (n^3); tôi có nên đăng giải pháp đó không? –
Làm thế nào để bạn nhận được '(1, -1, 0, 3, 8)' là một giải pháp? – noMAD
@noMAD, các phần tử trong "[subsequence] (http://en.wikipedia.org/wiki/Subsequence)" không cần phải liên tiếp trong chuỗi gốc. – xan