Aplicativo de pilha e fila LeetCode - 347. K principais elementos de alta frequência

Quais problemas clássicos as pilhas e filas podem resolver? Todas as perguntas podem ser encontradas na minha página inicial, bem-vindo a todos para prestar atenção ~~

(1) Problema de correspondência de colchetes (pilha)

(2) Problema de desduplicação de string (pilha)

  (3) Problema de expressão polonesa reversa (pilha)

  (4) O próximo elemento maior (pilha monotônica)

(5) Receber água da chuva (pilha monótona)

(6) Problema máximo da janela deslizante (fila monotônica) 

(7) Top K elementos com mais ocorrências (fila de prioridade)

(8) Fila de implementação de pilha

(9) Pilha de implementação de fila 

1. Solução 

32. Parênteses válidos mais longos

Dada uma string contendo apenas  '(' e  ')' , encontre o comprimento da substring válida mais longa (bem formada e consecutiva) entre parênteses.

 

class Solution {
    public int[] topKFrequent(int[] nums, int k) {
        Map<Integer, Integer> occurrences = new HashMap<Integer, Integer>();
        for (int num : nums) {
            occurrences.put(num, occurrences.getOrDefault(num, 0) + 1);
        }

        // int[] 的第一个元素代表数组的值,第二个元素代表了该值出现的次数
        PriorityQueue<int[]> queue = new PriorityQueue<int[]>(new Comparator<int[]>() {
            public int compare(int[] m, int[] n) {
                return m[1] - n[1];
            }
        });
        for (Map.Entry<Integer, Integer> entry : occurrences.entrySet()) {
            int num = entry.getKey(), count = entry.getValue();
            if (queue.size() == k) {
                if (queue.peek()[1] < count) {
                    queue.poll();
                    queue.offer(new int[]{num, count});
                }
            } else {
                queue.offer(new int[]{num, count});
            }
        }
        int[] ret = new int[k];
        for (int i = 0; i < k; ++i) {
            ret[i] = queue.poll()[0];
        }
        return ret;
    }
}

2. Conhecimento básico da pilha

A característica mais notável da pilha é: primeiro a entrar, último a sair

1. Classes de implementação comuns de pilhas em Java:

A implementação mais básica: Stack<Integer> stack=new Stack<>();

Implementação de fila dupla: Deque<Integer> stack=new LinkedList<>();

2. Métodos comuns de pilha

push(x) -- empurra um elemento para o final da fila.
pop() -- remove um elemento do início da fila.
peek() -- retorna o elemento no início da fila.
empty() -- retorna se a fila está vazia.

3. Conhecimento básico de filas

A característica mais notável da fila é: primeiro a entrar primeiro a sair

1. Classes comuns de implementação de filas em Java:

Fila comum: Queue<Integer> queue=new LinkedList<>();

Fila dupla: Deque<Integer> queue=new LinkedList<>();

Fila de prioridade: PriorityQueue<Integer> fila=new PriorityQueue<>();

2. Métodos comuns de filas

add Adiciona um elemento Se a fila estiver cheia, lança uma exceção IIIegaISlabEepeplian
remove Remove e retorna o elemento no início da fila Se a fila estiver vazia, lança um
elemento NoSuchElementException Retorna o elemento no início da fila Se a fila estiver vazia , em seguida, lança um NoSuchElementException

size O número de elementos
oferecidos Adicionar um elemento e retornar true Se a fila estiver cheia, retornar false
poll Remover e retornar o elemento no início da fila Se a fila estiver vazia, retornar null
peek Retornar o elemento no início da fila Se a fila estiver vazia, retorne null


put adiciona um elemento, bloqueia se a fila estiver cheia
take remove e retorna o elemento no início da fila, bloqueia se a fila estiver vazia

Acho que você gosta

Origin blog.csdn.net/w20001118/article/details/127308799
Recomendado
Clasificación