Conforme descrito nesta pergunta :
O Dropsort, projetado por David Morgan-Mar, é um exemplo de um "algoritmo de classificação" de tempo linear que produz uma lista que é, de fato, classificada, mas contém apenas alguns dos elementos originais. Qualquer elemento que não seja pelo menos tão grande quanto o máximo dos elementos anteriores é simplesmente removido da lista e descartado.
Para usar um de seus casos de teste, uma entrada de {1, 2, 5, 4, 3, 7}
rendimentos {1, 2, 5, 7}
, como 4
e 3
são eliminados por serem menores que o valor "classificado" anteriormente 5
,.
Não queremos algoritmos de "classificação", queremos que eles sejam o negócio real. Portanto, quero que você escreva um programa que, dada uma lista de números, produza uma lista de listas DropSorted (para ser um algoritmo de classificação completo, precisaríamos mesclar essas listas, mas a fusão de duas listas classificadas já foi feita antes, e pedir para você fazer de novo é quase duas perguntas; portanto, essa pergunta é especificamente a etapa "dividida" de nosso DropSort completo).
A organização e o conteúdo de nossas listas são cruciais, no entanto. A saída do seu programa deve ser equivalente à saída de um DropSort, seguida por um DropSort dos valores descartados e assim por diante, até que você tenha apenas uma lista de cadeias classificadas. Novamente, emprestando o conjunto de testes existente (e adicionando mais dois):
Input -> Output
{1, 2, 5, 4, 3, 7} -> {{1, 2, 5, 7}, {4}, {3}}
{10, -1, 12} -> {{10, 12}, {-1}}
{-7, -8, -5, 0, -1, 1} -> {{-7, -5, 0, 1}, {-8, -1}}
{9, 8, 7, 6, 5} -> {{9}, {8}, {7}, {6}, {5}}
{10, 13, 17, 21} -> {{10, 13, 17, 21}}
{10, 10, 10, 9, 10} -> {{10, 10, 10, 10}, {9}} //Note equivalent values aren't dropped
{5, 4, 3, 8, 7, 6} -> {{5, 8}, {4, 7}, {3, 6}}
{0, 2, 5, 4, 0, 7} -> {{0, 2, 5, 7}, {4}, {0}}
Você pode assumir que a entrada não está vazia.
Isso é código-golfe , então as regras padrão se aplicam!
{3,4,5,3,4,5,3,4,5}
resultar em {{3,4,5,5,5},{3,4,4},{3}}
?
[5, 4, 3, 8, 7, 6] -> [5, 8], [4,3,7,6]
?