Encontrando o terceiro menor número em Java: um guia completo
Publicados: 2023-08-23Você já se perguntou como encontrar com eficiência o terceiro menor número em uma matriz, lista ou fluxo de inteiros? Nesta postagem do blog, mergulharemos no mundo da programação Java e exploraremos diferentes técnicas para identificar o terceiro menor número em várias fontes de dados.
Ao trabalhar com manipulação e análise de dados, muitas vezes surge a necessidade de identificar elementos específicos dentro de uma coleção de números. Encontrar o menor ou o maior número é relativamente simples, mas determinar o terceiro menor número requer um pouco mais de sutileza. Nesta postagem do blog, abordaremos três métodos para resolver esse problema usando Java: classificação de um array, classificação de uma lista e utilização de fluxos.
Método 1: classificando um array
Arrays são uma das estruturas de dados fundamentais em Java, tornando-os um ponto de partida natural para nossa exploração. A ideia aqui é classificar o array em ordem crescente e então recuperar o elemento no índice 2.
Método 2: classificando uma lista
As listas fornecem uma alternativa mais flexível aos arrays, permitindo redimensionamento dinâmico e manipulação mais fácil. Para encontrar o terceiro menor número em uma lista, podemos seguir uma abordagem semelhante à classificação de arrays.
Método 3: utilizando streams
Os fluxos Java são uma maneira poderosa de processar sequências de elementos. Podemos usar fluxos para classificar os elementos e então recuperar o terceiro menor número.
Escolhendo o método certo
Cada método tem suas próprias vantagens e casos de uso. Se você tiver um array em mãos, o método de classificação de array pode ser o mais eficiente. As listas são versáteis e oferecem mais conveniência, enquanto os fluxos fornecem uma abordagem funcional e podem lidar com conjuntos de dados maiores com facilidade.
Aqui está um exemplo completo:
CrunchyThirdSmallestNumberFinder.java
pacote crunchify.com.tutorial; importar java.util.Arrays; importar java.util.List; importar java.util.stream.Collectors; importar java.util.stream.Stream; /** * @autor Crunchify.com * Encontrando o terceiro menor número em Java: um guia abrangente * */ classe pública CrunchyThirdSmallestNumberFinder { // Método para encontrar o terceiro menor número crocante em um array public static int findCrunchyThirdSmallest(int[] crunchArr) { if (crunchArr.length <3) { throw new IllegalArgumentException("O array deve conter pelo menos 3 elementos crunch"); } //Ordena o array crocante em ordem crescente Arrays.sort(crunchArr); return crunchArr[2]; // Retorna o terceiro menor elemento crocante } // Método para encontrar o terceiro menor número crocante de uma lista public static int findCrunchyThirdSmallest(List<Integer> crunchList) { if (crunchList.size() <3) { throw new IllegalArgumentException("A lista deve conter pelo menos 3 elementos crunch"); } // Classifica a lista crocante usando streams e coleta os elementos classificados em uma nova lista Lista<Integer> sortedCrunchList = crunchList.stream() .classificado() .collect(Collectors.toList()); retornar classificadoCrunchList.get(2); // Retorna o terceiro menor elemento crocante } // Método para encontrar o terceiro menor número crocante em um fluxo public static int findCrunchyThirdSmallest(Stream<Integer> crunchStream) { // Colete os elementos do fluxo crocante, classifique-os e reúna-os em uma lista List<Integer> sortedCrunchList = crunchStream.sorted().collect(Collectors.toList()); if (classificadoCrunchList.size() <3) { throw new IllegalArgumentException("O stream deve conter pelo menos 3 elementos crunch"); } retornar classificadoCrunchList.get(2); // Retorna o terceiro menor elemento crocante } public static void main(String[] args) { int[] crunchArr = {35, 62, 28, 31, 13, 97}; List<Integer> crunchList = Arrays.asList(9, 14, 676, 62, 11, 328); Stream<Integer> crunchStream = Stream.of(427, 53, 71, 99, 25, 62); // Encontre o terceiro menor número crocante usando fontes diferentes int crunchyThirdSmallestFromArr = findCrunchyThirdSmallest(crunchArr); int crunchyThirdSmallestFromList = findCrunchyThirdSmallest(crunchList); int crunchyThirdSmallestFromStream = findCrunchyThirdSmallest(crunchStream); // Imprime os terceiros menores números crocantes System.out.println("Terceiro menor crocante de arr: " + crunchyThirdSmallestFromArr); System.out.println("Crunchy terceiro menor da lista: " + crunchyThirdSmallestFromList); System.out.println("Terceiro menor crocante do stream: " + crunchyThirdSmallestFromStream); } }
Resultado do console Eclipse:
Basta executar o programa acima no Eclipse IDE ou IntelliJ IDEA e você obterá o resultado abaixo.
Crocante terceiro menor do arr: 31 Crocante, terceiro menor da lista: 14 Terceiro menor crocante do stream: 62 Processo concluído com código de saída 0
Existem algumas diferenças de desempenho a serem consideradas:
Em termos de complexidade de tempo, todos os três métodos têm etapas de classificação semelhantes, que geralmente têm uma complexidade de tempo de O(n log n)
, onde 'n' é o número de elementos na coleção (matriz, lista ou fluxo).
A complexidade de tempo de acesso ao terceiro menor elemento é constante, O(1)
, já que é uma simples pesquisa de array ou lista.
- Método Array: Este método classifica o array no local, portanto, não requer memória adicional para uma nova coleção classificada. Isso pode levar a um uso de memória um pouco melhor em comparação com os métodos de lista e fluxo.
- Método de lista: este método converte a lista em uma lista classificada usando fluxos. Embora seja conveniente, envolve a criação de uma nova lista, que consome memória adicional. Isso pode ser uma preocupação se o uso da memória for crucial.
- Método Stream: O método stream é bastante flexível e funcional, mas envolve coletar o stream em uma lista. Isso adiciona uma pequena sobrecarga em termos de memória e processamento em comparação com a classificação direta do array.
Deixe-me saber se você enfrentar algum problema ao executar este código.