[Entrevista] Encuentre más de la mitad de los números en una matriz: algoritmo de votación de Moore

Algoritmo de votación de Moore

Ideas

El algoritmo primero toma el primer elemento de la matriz como modo candidato y establece el recuento inicial en 1. Luego, repita cada elemento de la matriz e incremente el recuento si el elemento actual es igual al modo candidato; de lo contrario, disminuya el recuento. Cuando el recuento cae a 0, el algoritmo reemplaza el modo candidato con el elemento actual y restablece el recuento. En definitiva, la moda candidata es el número que supera la mitad.

principio

Este algoritmo funciona porque el número de apariciones de la mayoría de los elementos debe exceder la suma de las apariciones de todos los demás elementos. Al cancelar continuamente diferentes elementos, el modo candidato final será el elemento mayoritario.

Implementación de C++

#include <iostream>
#include <vector>

int findMajorityElement(std::vector<int>& nums) {
    
    
    int majority = nums[0];  // 候选的众数
    int count = 1;           // 候选众数的计数

    for (int i = 1; i < nums.size(); ++i) {
    
    
        if (nums[i] == majority) {
    
    
            // 如果当前元素等于候选众数,则增加计数
            ++count;
        } else {
    
    
            // 如果当前元素不等于候选众数,则减少计数
            --count;
            if (count == 0) {
    
    
                // 当计数降为0时,更换候选众数为当前元素
                majority = nums[i];
                count = 1;
            }
        }
    }

    // 最终的候选众数即为超过一半的数
    return majority;
}

int main() {
    
    
    std::vector<int> nums = {
    
    2, 2, 1, 1, 1, 2, 2};
    int majorityElement = findMajorityElement(nums);
    std::cout << "Majority Element: " << majorityElement << std::endl;
    return 0;
}

la complejidad

La complejidad temporal del algoritmo de votación de Moore es O (n), donde n es la longitud de la matriz, porque solo necesita atravesar la matriz una vez. Esto lo convierte en una forma eficaz de encontrar la mayor cantidad de elementos en grandes conjuntos de datos.

Supongo que te gusta

Origin blog.csdn.net/weixin_36313227/article/details/133270790
Recomendado
Clasificación