El elemento más grande de la array que se repite exactamente k veces

Dada una array de enteros y un entero ‘k’, la tarea es encontrar el elemento más grande de la array que se repite exactamente ‘k’ veces.
Ejemplos: 
 

Input: arr = {1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 6}, k = 2
Output: 5
The elements that exactly occur 2 times are 1, 3 and 5
And, the largest element among them is 5.

Input: arr = {1, 2, 3, 4, 5, 6}, k = 2
Output: No such element
There isn't any element in the array 
that occurs exactly 2 times.

Un enfoque simple: 
 

  • Ordenar la array.
  • Comience a recorrer la array desde el final (ya que estamos interesados ​​en el elemento más grande que satisface la condición) y cuente las frecuencias de cada elemento comparándolo con sus elementos vecinos.
  • El primer elemento de la derecha que ocurre exactamente ‘k’ veces es la respuesta.
  • Si no se encuentra ningún elemento que ocurra exactamente ‘k’ veces, imprima ‘No existe tal elemento’.

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

C++

// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
 
// Function that finds the largest
// element which is repeated 'k' times
void solve(int arr[], int n, int k)
{
    // sort the array
    sort(arr, arr + n);
 
    // if the value of 'k' is 1 and the
    // largest appears only once in the array
    if (k == 1 && arr[n - 2] != arr[n - 1]) {
        cout << arr[n - 1] << endl;
        return;
    }
 
    // counter  to count
    // the repeated elements
    int count = 1;
 
    for (int i = n - 2; i >= 0; i--) {
 
        // check if the element at index 'i'
        // is equal to the element at index 'i+1'
        // then increase the count
        if (arr[i] == arr[i + 1])
            count++;
 
        // else set the count to 1
        // to start counting the frequency
        // of the new number
        else
            count = 1;
 
        // if the count is equal to k
        // and the previous element
        // is not equal to this element
        if (count == k && (i == 0 || (arr[i - 1] != arr[i]))) {
            cout << arr[i] << endl;
            return;
        }
    }
 
    // if there is no such element
    cout << "No such element" << endl;
}
 
// Driver code
int main()
{
    int arr[] = { 1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 6 };
    int k = 2;
    int n = sizeof(arr) / sizeof(int);
 
    // find the largest element
    // that is repeated K times
    solve(arr, n, k);
 
    return 0;
}

Java

// Java implementation of the above approach
 
import java.util.Arrays ;
 
public class GFG {
 
       
    // Function that finds the largest
    // element which is repeated 'k' times
    static void solve(int arr[], int n, int k)
    {
        // sort the array
        Arrays.sort(arr);
       
        // if the value of 'k' is 1 and the
        // largest appears only once in the array
        if (k == 1 && arr[n - 2] != arr[n - 1]) {
            System.out.println(arr[n - 1]);
            return;
        }
       
        // counter  to count
        // the repeated elements
        int count = 1;
       
        for (int i = n - 2; i >= 0; i--) {
       
            // check if the element at index 'i'
            // is equal to the element at index 'i+1'
            // then increase the count
            if (arr[i] == arr[i + 1])
                count++;
       
            // else set the count to 1
            // to start counting the frequency
            // of the new number
            else
                count = 1;
       
            // if the count is equal to k
            // and the previous element
            // is not equal to this element
            if (count == k && (i == 0 || (arr[i - 1] != arr[i]))) {
                System.out.println(arr[i]);
                return;
            }
        }
       
        // if there is no such element
        System.out.println("No such element");
    }
     
    // Driver code
    public static void main(String args[])
    {
              int arr[] = { 1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 6 };
            int k = 2;
            int n = arr.length;
           
            // find the largest element
            // that is repeated K times
            solve(arr, n, k);
           
 
    }
    // This code is contributed by ANKITRAI1
}

Python 3

# Python 3 implementation of the approach
 
# Function that finds the largest
# element which is repeated 'k' times
def solve(arr, n, k):
 
    # sort the array
    arr.sort()
 
    # if the value of 'k' is 1 and the
    # largest appears only once in the array
    if (k == 1 and arr[n - 2] != arr[n - 1]):
        print( arr[n - 1] )
        return
 
    # counter to count
    # the repeated elements
    count = 1
 
    for i in range(n - 2, -1, -1) :
 
        # check if the element at index 'i'
        # is equal to the element at index 'i+1'
        # then increase the count
        if (arr[i] == arr[i + 1]):
            count += 1
 
        # else set the count to 1
        # to start counting the frequency
        # of the new number
        else:
            count = 1
 
        # if the count is equal to k
        # and the previous element
        # is not equal to this element
        if (count == k and (i == 0 or
           (arr[i - 1] != arr[i]))):
            print(arr[i])
            return
 
    # if there is no such element
    print("No such element")
 
# Driver code
if __name__ == "__main__":
     
    arr = [ 1, 1, 2, 3, 3, 4,
            5, 5, 6, 6, 6 ]
    k = 2
    n = len(arr)
 
    # find the largest element
    # that is repeated K times
    solve(arr, n, k)
 
# This code is contributed
# by ChitraNayal

C#

// C# implementation of the above approach
using System;
 
class GFG
{
// Function that finds the largest
// element which is repeated 'k' times
static void solve(int []arr, int n, int k)
{
    // sort the array
    Array.Sort(arr);
     
    // if the value of 'k' is 1 and the
    // largest appears only once in the array
    if (k == 1 && arr[n - 2] != arr[n - 1])
    {
        Console.WriteLine(arr[n - 1]);
        return;
    }
     
    // counter to count
    // the repeated elements
    int count = 1;
     
    for (int i = n - 2; i >= 0; i--)
    {
     
        // check if the element at index 'i'
        // is equal to the element at index 'i+1'
        // then increase the count
        if (arr[i] == arr[i + 1])
            count++;
     
        // else set the count to 1
        // to start counting the frequency
        // of the new number
        else
            count = 1;
     
        // if the count is equal to k
        // and the previous element
        // is not equal to this element
        if (count == k && (i == 0 ||
           (arr[i - 1] != arr[i])))
        {
            Console.WriteLine(arr[i]);
            return;
        }
    }
     
    // if there is no such element
    Console.WriteLine("No such element");
}
 
// Driver code
static public void Main ()
{
    int []arr = { 1, 1, 2, 3, 3, 4,
                  5, 5, 6, 6, 6 };
    int k = 2;
    int n = arr.Length;
     
    // find the largest element
    // that is repeated K times
    solve(arr, n, k);
}
}
 
// This code is contributed
// by Sach_Code

PHP

<?php
// PHP implementation of the approach
 
// Function that finds the largest
// element which is repeated 'k' times
function solve(&$arr, $n, $k)
{
    // sort the array
    sort($arr);
 
    // if the value of 'k' is 1 and the
    // largest appears only once in the array
    if ($k == 1 && $arr[$n - 2] != $arr[$n - 1])
    {
        echo $arr[$n - 1] ;
        echo ("\n");
        return;
    }
 
    // counter to count
    // the repeated elements
    $count = 1;
 
    for ($i = $n - 2; $i >= 0; $i--)
    {
 
        // check if the element at index 'i'
        // is equal to the element at index 'i+1'
        // then increase the count
        if ($arr[$i] == $arr[$i + 1])
            $count++;
 
        // else set the count to 1
        // to start counting the frequency
        // of the new number
        else
            $count = 1;
 
        // if the count is equal to k
        // and the previous element
        // is not equal to this element
        if ($count == $k && ($i == 0 ||
           ($arr[$i - 1] != $arr[$i])))
        {
            echo ($arr[$i]);
            echo ("\n");
            return;
        }
    }
 
    // if there is no such element
    echo ("No such element");
    echo ("\n");
}
 
// Driver code
$arr = array(1, 1, 2, 3, 3, 4,
             5, 5, 6, 6, 6 );
$k = 2;
$n = sizeof($arr);
 
// find the largest element
// that is repeated K times
solve($arr, $n, $k);
 
// This code is contributed
// by Shivi_Aggarwal
?>

Javascript

<script>
 
// Javascript implementation of the approach
 
// Function that finds the largest
// element which is repeated 'k' times
function solve(arr, n, k)
{
    // sort the array
    arr.sort((a,b)=> a-b)
 
    // if the value of 'k' is 1 and the
    // largest appears only once in the array
    if (k == 1 && arr[n - 2] != arr[n - 1]) {
        cout << arr[n - 1] << endl;
        return;
    }
 
    // counter  to count
    // the repeated elements
    var count = 1;
 
    for (var i = n - 2; i >= 0; i--) {
 
        // check if the element at index 'i'
        // is equal to the element at index 'i+1'
        // then increase the count
        if (arr[i] == arr[i + 1])
            count++;
 
        // else set the count to 1
        // to start counting the frequency
        // of the new number
        else
            count = 1;
 
        // if the count is equal to k
        // and the previous element
        // is not equal to this element
        if (count == k && (i == 0 || (arr[i - 1] != arr[i]))) {
            document.write( arr[i] + "<br>");
            return;
        }
    }
 
    // if there is no such element
    document.write( "No such element" );
}
 
// Driver code
var arr = [ 1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 6 ];
var k = 2;
var n = arr.length;
// find the largest element
// that is repeated K times
solve(arr, n, k);
 
</script>
Producción: 

5

 

Complejidad de tiempo: O(N*log(N))
Enfoque eficiente: 
 

  • Cree un mapa y almacene la frecuencia de cada elemento en el mapa.
  • Luego, recorra la array y encuentre el elemento más grande que tenga una frecuencia igual a ‘k’.
  • Si lo encuentra, imprima el número
  • De lo contrario, imprima ‘No existe tal elemento’.

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

C++

// C++ implementation of above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function that finds the largest
// element that occurs exactly 'k' times
void solve(int arr[], int n, int k)
{
    // store the frequency
    // of each element
    unordered_map<int, int> m;
    for (int i = 0; i < n; i++) {
        m[arr[i]]++;
    }
 
    // to store the maximum element
    int max = INT_MIN;
 
    for (int i = 0; i < n; i++) {
 
        // if current element has frequency 'k'
        // and current maximum hasn't been set
        if (m[arr[i]] == k && max == INT_MIN) {
 
            // set the current maximum
            max = arr[i];
        }
 
        // if current element has
        // frequency 'k' and it is
        // greater than the current maximum
        else if (m[arr[i]] == k && max < arr[i]) {
 
            // change the current maximum
            max = arr[i];
        }
    }
 
    // if there is no element
    // with frequency 'k'
    if (max == INT_MIN)
        cout << "No such element" << endl;
 
    // print the largest element
    // with frequency 'k'
    else
        cout << max << endl;
}
 
// Driver code
int main()
{
    int arr[] = { 1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 6 };
    int k = 4;
    int n = sizeof(arr) / sizeof(int);
 
    // find the largest element
    // that is repeated K times
    solve(arr, n, k);
 
    return 0;
}

Java

// Java implementation of above approach
import java.util.HashMap;
import java.util.Map;
 
class GfG
{
 
    // Function that finds the largest
    // element that occurs exactly 'k' times
    static void solve(int arr[], int n, int k)
    {
        // store the frequency of each element
        HashMap<Integer, Integer> m = new HashMap<>();
        for (int i = 0; i < n; i++)
        {
            if (!m.containsKey(arr[i]))
                m.put(arr[i], 0);
            m.put(arr[i], m.get(arr[i]) + 1);
        }
     
        // to store the maximum element
        int max = Integer.MIN_VALUE;
     
        for (int i = 0; i < n; i++)
        {
     
            // If current element has frequency 'k'
            // and current maximum hasn't been set
            if (m.get(arr[i]) == k && max == Integer.MIN_VALUE)
            {
     
                // set the current maximum
                max = arr[i];
            }
     
            // if current element has
            // frequency 'k' and it is
            // greater than the current maximum
            else if (m.get(arr[i]) == k && max < arr[i])
            {
     
                // change the current maximum
                max = arr[i];
            }
        }
     
        // if there is no element
        // with frequency 'k'
        if (max == Integer.MIN_VALUE)
            System.out.println("No such element");
     
        // print the largest element
        // with frequency 'k'
        else
            System.out.println(max);
    }
 
    // Driver code
    public static void main(String []args)
    {
         
        int arr[] = { 1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 6 };
        int k = 4;
        int n = arr.length;
     
        // find the largest element
        // that is repeated K times
        solve(arr, n, k);
    }
}
 
// This code is contributed by Rituraj Jain

Python3

# Python implementation of above approach
import sys
 
# Function that finds the largest
# element that occurs exactly 'k' times
def solve(arr, n, k):
 
    # store the frequency
    # of each element
    m = {};
     
    for i in range(0, n - 1):
        if(arr[i] in m.keys()):
            m[arr[i]] += 1;
        else:
            m[arr[i]] = 1;
        i += 1;
     
    # to store the maximum element
    max = sys.maxsize;
 
    for i in range(0, n - 1):
 
        # if current element has frequency 'k'
        # and current maximum hasn't been set
        if (m[arr[i]] == k and
            max == sys.maxsize):
 
            # set the current maximum
            max = arr[i];
         
        # if current element has
        # frequency 'k' and it is
        # greater than the current maximum
        elif (m[arr[i]] == k and max < arr[i]):
 
            # change the current maximum
            max = arr[i];
        i += 1
         
    # if there is no element
    # with frequency 'k'
    if (max == sys.maxsize):
        print("No such element");
 
    # print the largest element
    # with frequency 'k'
    else:
        print(max);
 
# Driver code
arr = [ 1, 1, 2, 3, 3, 4,
           5, 5, 6, 6, 6 ]
k = 4;
n = len(arr)
 
# find the largest element
# that is repeated K times
solve(arr, n, k)
 
# This code is contributed
# by Shivi_Aggarwal

C#

// C# Implementation of the above approach
using System;
using System.Collections.Generic;
 
class GfG
{
 
    // Function that finds the largest
    // element that occurs exactly 'k' times
    static void solve(int []arr, int n, int k)
    {
        // store the frequency of each element
        Dictionary<int,int> m = new Dictionary<int,int>();
        for (int i = 0 ; i < n; i++)
        {
            if(m.ContainsKey(arr[i]))
            {
                var val = m[arr[i]];
                m.Remove(arr[i]);
                m.Add(arr[i], val + 1);
            }
            else
            {
                m.Add(arr[i], 1);
            }
        }
     
        // to store the maximum element
        int max = int.MinValue;
     
        for (int i = 0; i < n; i++)
        {
     
            // If current element has frequency 'k'
            // and current maximum hasn't been set
            if (m[arr[i]] == k && max ==int.MinValue)
            {
     
                // set the current maximum
                max = arr[i];
            }
     
            // if current element has
            // frequency 'k' and it is
            // greater than the current maximum
            else if (m[arr[i]] == k && max < arr[i])
            {
     
                // change the current maximum
                max = arr[i];
            }
        }
     
        // if there is no element
        // with frequency 'k'
        if (max == int.MinValue)
            Console.WriteLine("No such element");
     
        // print the largest element
        // with frequency 'k'
        else
            Console.WriteLine(max);
    }
 
    // Driver code
    public static void Main(String []args)
    {
         
        int []arr = { 1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 6 };
        int k = 4;
        int n = arr.Length;
     
        // find the largest element
        // that is repeated K times
        solve(arr, n, k);
    }
}
 
// This code contributed by Rajput-Ji

Javascript

<script>
 
// Javascript implementation of above approach
 
// Function that finds the largest
// element that occurs exactly 'k' times
function solve(arr, n, k)
{
    // store the frequency
    // of each element
    var m = new Map();
    for (var i = 0; i < n; i++) {
        m.set(arr[i], m.get(arr[i])+1);
    }
 
    // to store the maximum element
    var max = -1000000000;
 
    for (var i = 0; i < n; i++) {
 
        // if current element has frequency 'k'
        // and current maximum hasn't been set
        if (m.get(arr[i]) == k && max == -1000000000) {
 
            // set the current maximum
            max = arr[i];
        }
 
        // if current element has
        // frequency 'k' and it is
        // greater than the current maximum
        else if (m.get(arr[i]) == k && max < arr[i]) {
 
            // change the current maximum
            max = arr[i];
        }
    }
 
    // if there is no element
    // with frequency 'k'
    if (max == -1000000000)
        document.write( "No such element");
 
    // print the largest element
    // with frequency 'k'
    else
        document.write( max);
}
 
// Driver code
var arr = [ 1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 6 ];
var k = 4;
var n = arr.length;
// find the largest element
// that is repeated K times
solve(arr, n, k);
 
</script>
Producción: 

No such element

 

Complejidad de tiempo: O(N)
 

Publicación traducida automáticamente

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