Noble integers in an array (count of greater elements is equal to value)

2.8

Given an array arr[], find a Noble integer in it. An integer x is said to be Noble in arr[] if the number of integers greater than x are equal to x. If there are many Noble integers, return any of them. If there is no, then return -1.

Examples:

Input  : [7, 3, 16, 10]
Output : 3  
Number of integers greater than 3
is three.

Input  : [-1, -9, -2, -78, 0]
Output : 0
Number of integers greater than 0
is zero.

Method 1 (Brute Force)

Iterate through the array. For every element arr[i], find the number of elements greater than arr[i].

// Java program to find Noble elements
// in an array.
import java.util.ArrayList;

public class Main
{
    // Returns a Noble integer if present,
    // else returns -1.
    public static int nobleInteger(int arr[])
    {
        int size = arr.length;
        for (int i=0; i<size; i++ )
        {
            int count = 0;
            for (int j=0; j<size; j++)
                if (arr[i] < arr[j])
                    count++;

            // If count of greater elements is equal
            // to arr[i]
            if (count == arr[i])
                return arr[i];
        }
        return -1;
    }

    public static void main(String args[])
    {
        int [] arr = {10, 3, 20, 40, 2};
        int res = nobleInteger(arr);
        if (res!=-1)
            System.out.println("The noble integer is "+ res);
        else
            System.out.println("No Noble Integer Found");
    }
}

Output :

The noble integer is 3

 

Method 2 (Use Sorting)

  1. Sort the Array arr[] in ascending order. This step takes (O(nlogn)).
  2. Iterate through the array. Compare the value of index i to the number of elements after index i. If arr[i] equals the number of elements after arr[i], it is a noble Integer. Condition to check: (A[i] == length-i-1). This step takes O(n).

Note: Array may have duplicate elements. So, we should skip the elements (adjacent elements in the sorted array) that are same.

// Java program to find Noble elements
// in an array.
import java.util.Arrays;

public class Main
{
    // Returns a Noble integer if present,
    // else returns -1.
    public static int nobleInteger(int arr[])
    {
        Arrays.sort(arr);

        // Return a Noble element if present
        // before last.
        int n = arr.length;
        for (int i=0; i<n-1; i++)
        {
            if (arr[i] == arr[i+1])
                continue;

            // In case of duplicates, we
            // reach last occurrence here.
            if (arr[i] == n-i-1)
                return arr[i];
        }

        if (arr[n-1] == 0)
            return arr[n-1];

        return -1;
    }

    // Driver code
    public static void main(String args[])
    {
        int [] arr = {10, 3, 20, 40, 2};
        int res = nobleInteger(arr);
        if (res != -1)
            System.out.println("The noble integer is "+ res);
        else
            System.out.println("No Noble Integer Found");
    }
}

Output:

The noble integer is 3.

This article is contributed by Saloni Baweja. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

GATE CS Corner    Company Wise Coding Practice

Recommended Posts:



2.8 Average Difficulty : 2.8/5.0
Based on 13 vote(s)










Writing code in comment? Please use ide.geeksforgeeks.org, generate link and share the link here.