Encuentre la cantidad de elementos mayores que k en una array ordenada

Dada una array ordenada arr[] de enteros y un entero k , la tarea es encontrar la cantidad de elementos en la array que son mayores que k . Tenga en cuenta que k puede o no estar presente en la array.
Ejemplos: 
 

Entrada: arr[] = {2, 3, 5, 6, 6, 9}, k = 6 
Salida: 1
Entrada: arr[] = {1, 1, 2, 5, 5, 7}, k = 8 
Salida :
 

Enfoque: La idea es realizar una búsqueda binaria y encontrar el número de elementos mayor que k. 
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 to return the count of elements
// from the array which are greater than k
int countGreater(int arr[], int n, int k)
{
    int l = 0;
    int r = n - 1;
 
    // Stores the index of the left most element
    // from the array which is greater than k
    int leftGreater = n;
 
    // Finds number of elements greater than k
    while (l <= r) {
        int m = l + (r - l) / 2;
 
        // If mid element is greater than
        // k update leftGreater and r
        if (arr[m] > k) {
            leftGreater = m;
            r = m - 1;
        }
 
        // If mid element is less than
        // or equal to k update l
        else
            l = m + 1;
    }
 
    // Return the count of elements greater than k
    return (n - leftGreater);
}
 
// Driver code
int main()
{
    int arr[] = { 3, 3, 4, 7, 7, 7, 11, 13, 13 };
    int n = sizeof(arr) / sizeof(arr[0]);
 
    int k = 7;
 
    cout << countGreater(arr, n, k);
 
    return 0;
}

Java

// Java implementation of the approach
class GFG
{
     
// Function to return the count of elements
// from the array which are greater than k
static int countGreater(int arr[], int n, int k)
{
    int l = 0;
    int r = n - 1;
 
    // Stores the index of the left most element
    // from the array which is greater than k
    int leftGreater = n;
 
    // Finds number of elements greater than k
    while (l <= r) {
        int m = l + (r - l) / 2;
 
        // If mid element is greater than
        // k update leftGreater and r
        if (arr[m] > k) {
            leftGreater = m;
            r = m - 1;
        }
 
        // If mid element is less than
        // or equal to k update l
        else
            l = m + 1;
    }
 
    // Return the count of elements greater than k
    return (n - leftGreater);
}
 
// Driver code
public static void main(String[] args)
{
    int arr[] = { 3, 3, 4, 7, 7, 7, 11, 13, 13 };
    int n = arr.length;
 
    int k = 7;
 
    System.out.println(countGreater(arr, n, k));
}
}
 
// This code is contributed by Code_Mech

Python3

# Python 3 implementation of the approach
 
# Function to return the count of elements
# from the array which are greater than k
def countGreater(arr, n, k):
    l = 0
    r = n - 1
 
    # Stores the index of the left most element
    # from the array which is greater than k
    leftGreater = n
 
    # Finds number of elements greater than k
    while (l <= r):
        m = int(l + (r - l) / 2)
 
        # If mid element is greater than
        # k update leftGreater and r
        if (arr[m] > k):
            leftGreater = m
            r = m - 1
 
        # If mid element is less than
        # or equal to k update l
        else:
            l = m + 1
 
    # Return the count of elements
    # greater than k
    return (n - leftGreater)
 
# Driver code
if __name__ == '__main__':
    arr = [3, 3, 4, 7, 7, 7, 11, 13, 13]
    n = len(arr)
    k = 7
 
    print(countGreater(arr, n, k))
# This code is contributed by
# Surendra_Gangwar

C#

// C# implementation of the approach
using System;
 
class GFG
{
     
// Function to return the count of elements
// from the array which are greater than k
static int countGreater(int[]arr, int n, int k)
{
    int l = 0;
    int r = n - 1;
 
    // Stores the index of the left most element
    // from the array which is greater than k
    int leftGreater = n;
 
    // Finds number of elements greater than k
    while (l <= r)
    {
        int m = l + (r - l) / 2;
 
        // If mid element is greater than
        // k update leftGreater and r
        if (arr[m] > k)
        {
            leftGreater = m;
            r = m - 1;
        }
 
        // If mid element is less than
        // or equal to k update l
        else
            l = m + 1;
    }
 
    // Return the count of elements greater than k
    return (n - leftGreater);
}
 
// Driver code
public static void Main()
{
    int[] arr = { 3, 3, 4, 7, 7, 7, 11, 13, 13 };
    int n = arr.Length;
 
    int k = 7;
 
    Console.WriteLine(countGreater(arr, n, k));
}
}
 
// This code is contributed by Code_Mech

PHP

<?php
// PHP implementation of the approach
 
// Function to return the count of elements
// from the array which are greater than k
function countGreater($arr, $n, $k)
{
    $l = 0;
    $r = $n - 1;
 
    // Stores the index of the left most element
    // from the array which is greater than k
    $leftGreater = $n;
 
    // Finds number of elements greater than k
    while ($l <= $r)
    {
        $m = $l + (int)(($r - $l) / 2);
 
        // If mid element is greater than
        // k update leftGreater and r
        if ($arr[$m] > $k)
        {
            $leftGreater = $m;
            $r = $m - 1;
        }
 
        // If mid element is less than
        // or equal to k update l
        else
            $l = $m + 1;
    }
 
    // Return the count of elements greater than k
    return ($n - $leftGreater);
}
 
// Driver code
$arr = array(3, 3, 4, 7, 7, 7, 11, 13, 13);
$n = sizeof($arr);
$k = 7;
 
echo countGreater($arr, $n, $k);
 
// This code is contributed
// by Akanksha Rai

Javascript

<script>
 
// Javascript implementation of the approach
 
// Function to return the count of elements
// from the array which are greater than k
function countGreater(arr, n, k)
{
    var l = 0;
    var r = n - 1;
 
    // Stores the index of the left most element
    // from the array which is greater than k
    var leftGreater = n;
 
    // Finds number of elements greater than k
    while (l <= r) {
        var m = l + parseInt((r - l) / 2);
 
        // If mid element is greater than
        // k update leftGreater and r
        if (arr[m] > k) {
            leftGreater = m;
            r = m - 1;
        }
 
        // If mid element is less than
        // or equal to k update l
        else
            l = m + 1;
    }
 
    // Return the count of elements greater than k
    return (n - leftGreater);
}
 
// Driver code
var arr = [3, 3, 4, 7, 7, 7, 11, 13, 13];
var n = arr.length;
var k = 7;
document.write( countGreater(arr, n, k));
 
</script>
Producción: 

3

 

Complejidad de tiempo: O(log(n)) donde n es el número de elementos en la array.
Espacio Auxiliar: O(1)

Publicación traducida automáticamente

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