Exercícios extra para consolidação de conhecimentos
- Implementando um .equals
Experimente tentar usar o método count numa lista de pares como atrás definiiu (objectos do tipo Pair). O que acontece? Os objectos têm um .equals padrão que é equivalente ao ==. Para ter o comportamento desejado (comparar os dois números do par) é necessário implementar esse método. Faça override do método padrão e implemente um equals correcto para a sua classe Pair. Teste a sua implementação fazendo contagens e verificando a correção do resultado.
- Mais métodos de listas
Implemente mais alguns métodos de listas fazendo operações que julgue serem úteis, treinando também a parte de perceber como deve ser a assinatura do método. Aqui ficam algumas sugestões para métodos:
- Devolver a posição da primeira (ou última) ocorrência de um dado elemento na lista
- Retirar todos os elementos que estão numa posição ímpar (ou par)
- Concatenar (juntar) duas listas
- Acesso eficiente ao último elemento
Para melhorar a eficiência dos métodos que necessitam de aceder ao final da lista (getLast e addLast) adicione um atributo private Node<T> last à sua classe de lista ligada. Faça as devidas modificações em todos os métodos implementados (no final têm que deixar correctos não só os valores de first e size, mas também de last). Este é um tradeoff típico: melhorar a eficiência tornando (ligeiramente) mais complexa a implementação.
Desafio
Para esta semana vou colocar um problema diferente dos anteriores e um pouco mais fácil, na esperança de que mais alunos voltem a tentar fazer (e a conseguir). É novamente um problema da minha autoria quefoi usado nas Olimpíadas de Informática, mas neste caso na qualificação (uma fase mais preliminar) e vários miúdos do secundário conseguiram resolvê-lo completamente:
O limite de tempo de execução para cada caso de teste é de 1 segundo, pelo que a solução só será aceite e com pontuação máxima no Mooshak se for eficiente (note que a frase pode ter um milhão de caracteres).
Para estes problemas de desafios não vou dar logo dicas, para vos deixar pensar, mas se quiserem mesmo resolver o problema e não estejam a conseguir (mesmo depois de terem realmente tentado), podem falar comigo para obter pistas, ou ter uma ideia de como os "atacar"