Encuentra elementos más grandes que la mitad de los elementos en una array | conjunto 2

Dada una array arr[] que consta de N enteros positivos, la tarea es encontrar los elementos que son mayores que al menos la mitad de los elementos de la array.

Ejemplos:

Entrada: arr[] = {1, 6, 3, 4}
Salida: 4 6
Explicación:
El tamaño de la array es 4. Los elementos que son mayores que al menos N/2 (= 4/2 = 2) elementos de la array son 4 y 6

Entrada: arr[] = {10, 4, 2, 8, 9}
Salida: 10 9 8

 

Enfoque ingenuo: consulte la publicación anterior de este artículo para el enfoque ingenuo.

Complejidad de Tiempo: O(N 2 )
Espacio Auxiliar: O(1)

Enfoque basado en la clasificación: consulte la publicación anterior de este artículo para conocer el enfoque basado en la clasificación .

Complejidad de tiempo: O(N*log N)
Espacio auxiliar: O(1)

Enfoque: el enfoque anterior también se puede optimizar mediante el uso de Hashing al realizar un seguimiento del recuento de elementos de la array . Después de encontrar la frecuencia de cada elemento , imprima los elementos en orden no creciente hasta que se hayan impreso N/2 elementos. Siga los pasos a continuación para resolver el problema:

A continuación se muestra la implementación del enfoque anterior:

C++

// C++ program for the above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to find the element that
// are larger than half of elements
// of the array
void findLarger(int arr[], int n)
{
    // Find the value of mid
    int mid = (n + 1) / 2;
 
    // Stores the maximum element
    int mx = *max_element(arr, arr + n);
 
    // Stores the frequency of each
    // array element
    int count[mx + 1] = { 0 };
    for (int i = 0; i < n; i++) {
        count[arr[i]]++;
    }
 
    // Traverse the array in the
    // reverse order
    for (int i = mx; i >= 0; i--) {
 
        while (count[i] > 0) {
 
            // Decrement the value
            // of count[i] and mid
            count[i]--;
            mid--;
 
            // Print the current element
            cout << i << ' ';
 
            // Check if the value of
            // mid is equal to 0
            if (mid == 0)
                break;
        }
        if (mid == 0)
            break;
    }
}
 
// Driver Code
int main()
{
    int arr[] = { 10, 4, 2, 8, 9 };
    int N = sizeof(arr) / sizeof(arr[0]);
    findLarger(arr, N);
 
    return 0;
}

Java

// Java program for the above approach
import java.util.*;
 
class GFG{
 
// Function to find the element that
// are larger than half of elements
// of the array
static void findLarger(int arr[], int n)
{
    // Find the value of mid
    int mid = (n + 1) / 2;
 
    // Stores the maximum element
    int mx = Arrays.stream(arr).max().getAsInt();
 
    // Stores the frequency of each
    // array element
    int count[] = new int[mx+1];
    for (int i = 0; i < mx+1; i++) {
        count[i] = 0;
    }
 
    for (int i = 0; i < n; i++) {
        count[arr[i]]++;
    }
 
    // Traverse the array in the
    // reverse order
    for (int i = mx; i >= 0; i--) {
 
        while (count[i] > 0) {
 
            // Decrement the value
            // of count[i] and mid
            count[i]--;
            mid--;
 
            // Print the current element
            System.out.print(i + " ");
 
            // Check if the value of
            // mid is equal to 0
            if (mid == 0)
                break;
        }
        if (mid == 0)
            break;
    }
}
 
 
// Driver Code
public static void main(String[] args)
{
    int arr[] = { 10, 4, 2, 8, 9 };
    int N = arr.length;
    findLarger(arr, N);
}
}
 
// This code is contributed by sanjoy_62.

Python3

# Python program for the above approach
 
# Function to find the element that
# are larger than half of elements
# of the array
def findLarger(arr, n):
    # Find the value of mid
    mid = (n + 1) // 2
 
    # Stores the maximum element
    mx = max(arr)
 
    # Stores the frequency of each
    # array element
    count = [0]*(mx + 1)
 
    for i in range(n):
        count[arr[i]] += 1
 
    # Traverse the array in the
    # reverse order
    for i in range(mx,-1, -1):
        while (count[i] > 0):
 
            # Decrement the value
            # of count[i] and mid
            count[i] -= 1
            mid -= 1
 
            # Print current element
            print(i, end = " ")
 
            # Check if the value of
            # mid is equal to 0
            if (mid == 0):
                break
        if (mid == 0):
            break
 
# Driver Code
if __name__ == '__main__':
    arr = [10, 4, 2, 8, 9 ]
    N = len(arr)
    findLarger(arr, N)
 
# This code is contributed by mohit kumar 29.

C#

// C# program for the above approach
using System;
using System.Collections.Generic;
 
class GFG{
 
// Function to find the element that
// are larger than half of elements
// of the array
static void findLarger(int []arr, int n)
{
    // Find the value of mid
    int mid = (n + 1) / 2;
 
    // Stores the maximum element
    int mx = Int32.MinValue;
    for(int i=0;i<n;i++){
        if(arr[i]>mx)
            mx = arr[i];
    }
 
    // Stores the frequency of each
    // array element
    int []count = new int[mx + 1];
    Array.Clear(count,0,mx+1);
    for (int i = 0; i < n; i++) {
        count[arr[i]]++;
    }
 
    // Traverse the array in the
    // reverse order
    for (int i = mx; i >= 0; i--) {
 
        while (count[i] > 0) {
 
            // Decrement the value
            // of count[i] and mid
            count[i]--;
            mid--;
 
            // Print the current element
            Console.Write(i+" ");
 
            // Check if the value of
            // mid is equal to 0
            if (mid == 0)
                break;
        }
        if (mid == 0)
            break;
    }
}
 
// Driver Code
public static void Main()
{
    int []arr = { 10, 4, 2, 8, 9 };
    int N = arr.Length;
    findLarger(arr, N);
}
}
 
// This code is contributed by SURENDRA_GANGWAR.

Javascript

<script>
 
        // JavaScript program for the above approach
 
        // Function to find the element that
        // are larger than half of elements
        // of the array
        function findLarger(arr, n) {
            // Find the value of mid
            let mid = (n + 1) / 2;
 
            // Stores the maximum element
            let mx = Math.max.apply(null, arr)
 
            // Stores the frequency of each
            // array element
            var count = new Array(mx + 1).fill(0);
            for (let i = 0; i < n; i++) {
                count[arr[i]]++;
            }
 
            // Traverse the array in the
            // reverse order
            for (let i = mx; i >= 0; i--) {
 
                while (count[i] > 0) {
 
                    // Decrement the value
                    // of count[i] and mid
                    count[i]--;
                    mid--;
 
                    // Print the current element
                    document.write(i + ' ');
 
                    // Check if the value of
                    // mid is equal to 0
                    if (mid == 0)
                        break;
                }
                if (mid == 0)
                    break;
            }
        }
 
        // Driver Code
 
        var arr = [10, 4, 2, 8, 9];
        var N = 5;
        findLarger(arr, N);
 
    </script>
Producción: 

10 9 8

 

Complejidad de Tiempo: O(M), donde M es el elemento máximo del arreglo , arr[]
Espacio Auxiliar: O(M)

Publicación traducida automáticamente

Artículo escrito por srivastavaharshit848 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 *