Programa Javascript para verificar el elemento mayoritario en una array ordenada

Pregunta: Escribe una función para encontrar si un entero x aparece más de n/2 veces en una array ordenada de n enteros. 
Básicamente, necesitamos escribir una función, digamos isMajority(), que tome una array (arr[] ), el tamaño de la array (n) y un número para buscar (x) como parámetros y devuelva verdadero si x es un elemento mayoritario (presente más de n/2 veces).

Ejemplos: 

Input: arr[] = {1, 2, 3, 3, 3, 3, 10}, x = 3
Output: True (x appears more than n/2 times in the given array)

Input: arr[] = {1, 1, 2, 4, 4, 4, 6, 6}, x = 4
Output: False (x doesn't appear more than n/2 times in the given array)

Input: arr[] = {1, 1, 1, 2, 2}, x = 1
Output: True (x appears more than n/2 times in the given array)

MÉTODO 1 (usando la búsqueda lineal) Busque 
linealmente la primera aparición del elemento, una vez que lo encuentre (déjelo en el índice i), verifique el elemento en el índice i + n/2. Si el elemento está presente en i+n/2, devuelve 1; de lo contrario, devuelve 0.

Producción: 

4 appears more than 3 times in arr[]

Complejidad de tiempo: O(n)

MÉTODO 2 (Usando la búsqueda binaria) 
Use la metodología de búsqueda binaria para encontrar la primera ocurrencia del número dado. El criterio para la búsqueda binaria es importante aquí. 

Javascript

<script>
    // Javascript Program to check for majority
    // element in a sorted array */
      
    // If x is present in arr[low...high]
    // then returns the index of first
    // occurrence of x, otherwise returns -1
    function _binarySearch(arr, low, high, x)
    {
        if (high >= low) {
            let mid = parseInt((low + high) / 2, 10);
            //low + (high - low)/2;
   
            // Check if arr[mid] is the first
            // occurrence of x.    arr[mid] is
            // first occurrence if x is one of
            // the following is true:
            // (i) mid == 0 and arr[mid] == x
            // (ii) arr[mid-1] < x and arr[mid] == x
               
            if ((mid == 0 || x > arr[mid - 1]) && (arr[mid] == x))
                return mid;
            else if (x > arr[mid])
                return _binarySearch(arr, (mid + 1), high, x);
            else
                return _binarySearch(arr, low, (mid - 1), x);
        }
   
        return -1;
    }
   
    // This function returns true if the x is
    // present more than n/2 times in arr[]
    // of size n
    function isMajority(arr, n, x)
    {
           
        // Find the index of first occurrence
        // of x in arr[]
        let i = _binarySearch(arr, 0, n - 1, x);
   
        // If element is not present at all,
        // return false
        if (i == -1)
            return false;
   
        // check if the element is present
        // more than n/2 times
        if (((i + parseInt(n / 2, 10)) <= (n - 1)) && arr[i + parseInt(n / 2, 10)] == x)
            return true;
        else
            return false;
    }
      
    let arr = [ 1, 2, 3, 3, 3, 3, 10 ];
    let n = arr.length;
    let x = 3;
    if (isMajority(arr, n, x) == true)
      document.write(x + " appears more than " + parseInt(n / 2, 10) + " times in arr[]");
    else
      document.write(x + " does not appear more than " + parseInt(n / 2, 10) + " times in arr[]");
      
</script>
Producción

3 appears more than 3 times in arr[]

Complejidad temporal : O(1)
Espacio auxiliar: O(1)

Consulte el artículo completo sobre Comprobar el elemento mayoritario en una array ordenada para obtener más detalles.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *