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

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.
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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.

# GATE CS Corner    Company Wise Coding Practice

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.
2.8 Average Difficulty : 2.8/5.0
Based on 13 vote(s)