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.
