First strictly greater element in a sorted array in Java
Last Updated :
15 Nov, 2022
Given a sorted array and a target value, find the first element that is strictly greater than given element.
Examples:
Input : arr[] = {1, 2, 3, 5, 8, 12}
Target = 5
Output : 4 (Index of 8)
Input : {1, 2, 3, 5, 8, 12}
Target = 8
Output : 5 (Index of 12)
Input : {1, 2, 3, 5, 8, 12}
Target = 15
Output : -1
A simple solution is to linearly traverse the given array and find the first element that is strictly greater. If no such element exists, then return -1.
An efficient solution is to use Binary Search. In a general binary search, we are looking for a value that appears in the array. Sometimes, however, we need to find the first element which is either greater than a target.
To see that this algorithm is correct, consider each comparison being made. If we find an element that's no greater than the target element, then it and everything below it can't possibly match, so there's no need to search that region. We can thus search for the right half. If we find an element that is larger than the element in question, then anything after it must also be larger, so they can't be the first element that's bigger and so we don't need to search them. The middle element is thus the last possible place it could be.
Note that on each iteration we drop off at least half the remaining elements from consideration. If the top branch executes, then the elements in the range [low, (low + high) / 2] are all discarded, causing us to lose floor((low + high) / 2) - low + 1 >= (low + high) / 2 - low = (high - low) / 2 elements.
If the bottom branch executes, then the elements in the range [(low + high) / 2 + 1, high] are all discarded. This loses us high - floor(low + high) / 2 + 1 >= high - (low + high) / 2 = (high - low) / 2 elements.
Consequently, we'll end up finding the first element greater than the target in O(lg n) iterations of this process.
Implementation:
C++
// C++ program to find first element that
// is strictly greater than given target.
#include <iostream>
using namespace std;
int next(int arr[], int target, int end)
{
int start = 0;
int ans = -1;
while (start <= end)
{
int mid = (start + end) / 2;
// Move to right side if target is
// greater.
if (arr[mid] <= target)
start = mid + 1;
// Move left side.
else
{
ans = mid;
end = mid - 1;
}
}
return ans;
}
// Driver code
int main()
{
int arr[] = {1, 2, 3, 5, 8, 12};
int n = sizeof(arr) / sizeof(arr[0]);
cout << next(arr, 8, n-1);
return 0;
}
// This code is contributed by sanjeev2552
Java
// Java program to find first element that
// is strictly greater than given target.
class GfG {
private static int next(int[] arr, int target)
{
int start = 0, end = arr.length - 1;
int ans = -1;
while (start <= end) {
int mid = (start + end) / 2;
// Move to right side if target is
// greater.
if (arr[mid] <= target) {
start = mid + 1;
}
// Move left side.
else {
ans = mid;
end = mid - 1;
}
}
return ans;
}
// Driver code
public static void main(String[] args)
{
int[] arr = { 1, 2, 3, 5, 8, 12 };
System.out.println(next(arr, 8));
}
}
Python3
# Python program to find first element that
# is strictly greater than given target.
def next(arr, target):
start = 0;
end = len(arr) - 1;
ans = -1;
while (start <= end):
mid = (start + end) // 2;
# Move to right side if target is
# greater.
if (arr[mid] <= target):
start = mid + 1;
# Move left side.
else:
ans = mid;
end = mid - 1;
return ans;
# Driver code
if __name__ == '__main__':
arr = [1, 2, 3, 5, 8, 12];
print(next(arr, 8));
# This code is contributed by 29AjayKumar
C#
// C# program to find first element that
// is strictly greater than given target.
using System;
class GfG
{
private static int next(int[] arr, int target)
{
int start = 0, end = arr.Length - 1;
int ans = -1;
while (start <= end)
{
int mid = (start + end) / 2;
// Move to right side if target is
// greater.
if (arr[mid] <= target)
{
start = mid + 1;
}
// Move left side.
else
{
ans = mid;
end = mid - 1;
}
}
return ans;
}
// Driver code
public static void Main()
{
int[] arr = { 1, 2, 3, 5, 8, 12 };
Console.WriteLine(next(arr, 8));
}
}
// This code is contributed by Code_Mech
PHP
<?php
// PHP program to find first element that
// is strictly greater than given target.
function next0($arr, $target)
{
$start = 0; $end = sizeof($arr) - 1;
$ans = -1;
while ($start <= $end)
{
$mid = (int)(($start + $end) / 2);
// Move to right side if target is
// greater.
if ($arr[$mid] <= $target)
{
$start = $mid + 1;
}
// Move left side.
else
{
$ans = $mid;
$end = $mid - 1;
}
}
return $ans;
}
// Driver code
{
$arr = array( 1, 2, 3, 5, 8, 12 );
echo(next0($arr, 8));
}
// This code is contributed by Code_Mech
?>
JavaScript
<script>
// Javascript program to find first element that
// is strictly greater than given target.
function next(arr, target)
{
let start = 0, end = arr.length - 1;
let ans = -1;
while (start <= end)
{
let mid = parseInt((start + end) / 2, 10);
// Move to right side if target is
// greater.
if (arr[mid] <= target)
{
start = mid + 1;
}
// Move left side.
else
{
ans = mid;
end = mid - 1;
}
}
return ans;
}
// Driver code
let arr = [ 1, 2, 3, 5, 8, 12 ];
document.write(next(arr, 8));
// This code is contributed by decode2207
</script>
Time Complexity: O(log(n))
Auxiliary Space: O(1)
Similar Reads
First strictly smaller element in a sorted array in Java
Given a sorted array and a target value, find the first element that is strictly smaller than the given element. Examples: Input : arr[] = {1, 2, 3, 5, 8, 12} Target = 5 Output : 2 (Index of 3) Input : {1, 2, 3, 5, 8, 12} Target = 8 Output : 3 (Index of 5) Input : {1, 2, 3, 5, 8, 12} Target = 15 Out
13 min read
Java Program to Find Largest Element in an Array
Finding the largest element in an array is a common programming task. There are multiple approaches to solve it. In this article, we will explore four practical approaches one by one to solve this in Java.Example Input/Output:Input: arr = { 1, 2, 3, 4, 5}Output: 5Input: arr = { 10, 3, 5, 7, 2, 12}Ou
4 min read
Sort an Array and Insert an Element Inside Array in Java
Sorting an array can be done by using inbuilt sort function while for the insertion we have to create a new array to do so as arrays in Java are immutable. To learn more about sorting in Java follow the article mentioned below: Sorting: Arrays.sort() in Java with examples Approach 1: Create a new ar
3 min read
Java Program for Last duplicate element in a sorted array
We have a sorted array with duplicate elements and we have to find the index of last duplicate element and print index of it and also print the duplicate element. If no such element found print a message. Examples: Input : arr[] = {1, 5, 5, 6, 6, 7} Output : Last index: 4 Last duplicate item: 6 Inpu
2 min read
How to Find the Maximum Element in an Array?
In Java, the array is a data structure that allows the users to store data of the same type in contiguous memory locations. To find the maximum element in an Array in Java, we can sort the array in ascending order using the Arrays.sort() method and then we can access the last element of the array wh
1 min read
Custom Comparator for a Specific Element type in a PriorityQueue in Java
PriorityQueue in Java is a data structure that stores elements according to their specified natural order or comparison. By default, it uses a natural order, but we can also define customized comparisons to sort things out based on specific criteria. Custom Comparator in PriorityQueueA Custom Compar
3 min read
Java Program for Ceiling in a sorted array
Given a sorted array and a value x, the ceiling of x is the smallest element in array greater than or equal to x, and the floor is the greatest element smaller than or equal to x. Assume than the array is sorted in non-decreasing order. Write efficient functions to find floor and ceiling of x. Examp
4 min read
Java Program To Find Next Greater Element
Given an array, print the Next Greater Element (NGE) for every element. The Next greater Element for an element x is the first greater element on the right side of x in the array. Elements for which no greater element exist, consider the next greater element as -1. Examples: For an array, the righ
6 min read
Sort and Search an Element in Java
In Java sorting and searching an element in an array is very easy. Unlike C, where we have to make all the functions to work, Java has inbuilt functions to do the same work. To sort an array there is a sort function and to search an element in a sorted array there is a binarySearch() function. To le
3 min read
Java Program for Sorting all array elements except one
Given an array, a positive integer, sort the array in ascending order such that the element at index K in the unsorted array stays unmoved and all other elements are sorted. Examples: Input : arr[] = {10, 4, 11, 7, 6, 20} k = 2; Output : arr[] = {4, 6, 11, 7, 10, 20} Input : arr[] = {30, 20, 10} k =
3 min read