Wyzwanie polega na napisaniu najkrótszej implementacji w celu znalezienia najdłuższego rosnącego podsekwencji .
Przykład : Niech S będzie sekwencją 1 5 7 1 8 4 3 5 [długość S = 8]
- Mamy 1 podsekwencję o długości 0 [uzna, że rośnie]
- 6 podsekwencji o długości 1 {1,5,7,8,4,3} [wszystkie uważa się za rosnące]
- (7 * 8) / 2 podsekwencje o długości 2 [ale usuniemy duplikaty], rosnąca podsekwencja ma mocną czerń.
{ 15,17 , 11, 18,14,13,57 , 51, 58 , 54,53,55,71, 78 , 74,73,75,84,83,85,43, 45,35 }
[zauważ, że interesują nas tylko ściśle rosnące podsekwencje]
[nie można zmienić kolejności elementów w sekwencji, więc w podanej sekwencji nie ma podsekwencji [37]]
- Mamy rosnące podsekwencje o długości 4, która wynosi 1578, ale nie ma podsekwencji o długości 5, więc rozważamy długość najdłużej rosnącej pod-sekwencji = 4.
Wejście :
a 1 a 2 ... a N (Sekwencja)
wszystkie liczby są dodatnimi liczbami całkowitymi mniejszymi niż 10 3
N <= 1000
Wyjście :
Jedna liczba całkowita oznaczająca długość najdłuższej wzrastającej pod-sekwencji sekwencji wejściowej.
sample input(1)
1 2 4 2 5
sample output(1)
4
sample input(2)
1 5 7 1 8 4 3 5
sample output(2)
4
Twój kod powinien zostać uruchomiony w odpowiednim czasie, przetestuj kod w tej sprawie przed przesłaniem go tutaj (również link zawiera moje 290-bajtowe rozwiązanie c ++ 11)
Możesz pobrać dane wejściowe z pliku / standardowego wejścia lub jako parametr funkcji i możesz wydrukować dane wyjściowe do pliku / standardowego wyjścia lub po prostu zwrócić wartość, jeśli napiszesz funkcję
Tablica wyników
function f(){...}) czy funkcji wewnętrznej (tylko ...)? Jeśli policzymy funkcje zewnętrzne, czy dozwolone są funkcje anonimowe?