Encontrando o terceiro menor número em Java: um guia completo

Publicados: 2023-08-23

Você 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.

Encontrando o terceiro menor número em Java – um guia abrangente

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.

  1. 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.
  2. 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.
  3. 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.