Given an array, for each element find the value of nearest element to the right which is having frequency greater than as that of current element. If there does not exist an answer for a position, then make the value ‘-1’.
Input : a = [1, 1, 2, 3, 4, 2, 1] Output : [-1, -1, 1, 2, 2, 1, -1] Explanation: Given array a = [1, 1, 2, 3, 4, 2, 1] Frequency of each element is: 3, 3, 2, 1, 1, 2, 3 Lets calls Next Greater Frequency element as NGF 1. For element a = 1 which has a frequency = 3, As it has frequency of 3 and no other next element has frequency more than 3 so '-1' 2. For element a = 1 it will be -1 same logic like a 3. For element a = 2 which has frequency = 2, NGF element is 1 at position = 6 with frequency of 3 > 2 4. For element a = 3 which has frequency = 1, NGF element is 2 at position = 5 with frequency of 2 > 1 5. For element a = 4 which has frequency = 1, NGF element is 2 at position = 5 with frequency of 2 > 1 6. For element a = 2 which has frequency = 2, NGF element is 1 at position = 6 with frequency of 3 > 2 7. For element a = 1 there is no element to its right, hence -1 Input : a = [1, 1, 1, 2, 2, 2, 2, 11, 3, 3] Output : [2, 2, 2, -1, -1, -1, -1, 3, -1, -1]
A simple hashing technique is to use values as index is be used to store frequency of each element. Create a list suppose to store frequency of each number in the array. (Single traversal is required). Now use two loops.
The outer loop picks all the elements one by one.
The inner loop looks for the first element whose frequency is greater than the frequency of current element.
If a greater frequency element is found then that element is printed, otherwise -1 is printed.
Time complexity : O(n*n)
We can use hashing and stack data structure to efficiently solve for many cases. A simple hashing technique is to use values as index and frequency of each element as value. We use stack data structure to store position of elements in the array.
1) Create a list to use values as index to store frequency of each element.
2) Push the position of first element to stack.
3) Pick rest of the position of elements one by one and follow following steps in loop.
…….a) Mark the position of current element as ‘i’ .
……. b) If the frequency of the element which is pointed by the top of stack is greater than frequency of the current element, push the current position i to the stack
……. c) If the frequency of the element which is pointed by the top of stack is less than frequency of the current element and the stack is not empty then follow these steps:
…….i) continue popping the stack
…….ii) if the condition in step c fails then push the current position i to the stack
4) After the loop in step 3 is over, pop all the elements from stack and print -1 as next greater frequency element for them does not exist.
Time complexity is O(n).
Below is the implementation of the above problem.
[-1, -1, 1, 2, 2, 1, -1]
This article is contributed by Sruti Rai . Thank you Koustav for your valuable support. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to email@example.com. 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.
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.
- Maximum difference between frequency of two elements such that element having greater frequency is also greater
- Find next Smaller of next Greater in an array
- Next Greater Element
- Next greater element in same order as input
- Find the next greater element in a Circular Array
- Elements greater than the previous and next element in an Array
- Distance from Next Greater element
- Find element in a sorted array whose frequency is greater than or equal to n/2.
- Smallest subarray having an element with frequency greater than that of other elements
- Replace every array element by Bitwise Xor of previous and next element
- Replace every element of the array by its next element
- Arrange array elements such that last digit of an element is equal to first digit of the next element
- Maximum element in an array such that its previous and next element product is maximum
- Check if frequency of character in one string is a factor or multiple of frequency of same character in other string
- Maximum length prefix such that frequency of each character is atmost number of characters with minimum frequency
- Replace each element by the difference of the total size of the array and frequency of that element
- Find next greater number with same set of digits
- Print next greater number of Q queries
- Maximum product of indexes of next greater on left and right
- Count of Array elements greater than all elements on its left and next K elements on its right