Sort the elements in ascending order of sum of its occurrence

By | October 2, 2023

Given an unsorted array of integers which may contain repeated elements, sort the elements in ascending order of sum of its occurrence and print only distinct elements. If there exist more than one element whose sum of occurrences are same then, the one which is smaller, will come first.

Examples:

Input : arr[] = [8, 2, 4, 2, 4, 2, 1] 
Output : arr[] = [1, 2, 4, 8]

Explaination :
Here, 2 appears 3 times, 4 appears 2 times, 
1 appears 1 times and 10 appears 1 times.

Thus, Sum of all occurrences of 2 in given array = 2 * 3 = 6,
Sum of all occurrences of 4 = 4 * 2 = 8,
Sum of all occurrences of 8 = 8 * 1 = 8,
Sum of all occurrences of 1 = 1 * 1 = 1.

Therefore sorting the array in ascending order based on the above sum = [1, 2, 4, 8]

Input : arr[] = [9, 4, 3, 3, 3, 2, 4, 2]
Output : arr[] = [2, 4, 3, 9]

Recommended: Applications of Operating System

Approach:

  1. Create a map that will map elements to it appearence i.e. if a occur one time then a will map to a but if a occur m times then a will be map to a*m.
  2. After doing the mapping, sort the dictionary in asscending order based on their values. In case of tie, sort based on keys.
  3. Finaly copy the sorted dictionary keys in final output array.

Implementation:

#python3 program to sort elements of
#arr[] in descending order of sum
#of its occurrence
 
def sort_desc(arr):
    
    #to store sum of all occurrences of an elements
    d_sum = {}
    #to store final result
    ans = []
    #to store maximum sum of occurrence
    mx = 0
     
    #Traverse and calculate sum of occurrence and
    #count of occurrence of elements of arr[]
    for x in arr:
        if x not in d_sum:
            d_sum[x] = x
        else:
            d_sum[x] += x
            
    #sort d_sum in decreasing order of its value
    l=sorted(d_sum.items(), key= lambda x:(x[1],x[0]))

    #store the final result
    for x in l:
        ans += [x[0]]
        
    return ans
#Driver Code
arr = [9, 4, 3, 3, 3, 2, 4, 2]
print("arr :",sort_desc(arr))

Output : 

arr : [2, 4, 3, 9]

Time complexity: O(nlogn)

Please write comments if you find anything incorrect. A gentle request to share this topic on your social media profile.

Author: Mithlesh Upadhyay

I hold an M.Tech degree in Artificial Intelligence (2023) from Delhi Technological University (DTU) and possess over 4 years of experience. I worked at GeeksforGeeks, leading teams and managing content, including GATE CS, Test Series, Placements, C, and C++. I've also contributed technical content to companies like MarsDev, Tutorialspoint, StudyTonight, TutorialCup, and Guru99. My skill set includes coding, Data Structures and Algorithms (DSA), and Object-Oriented Programming (OOPs). I'm proficient in C++, Python, JavaScript, HTML, CSS, Bootstrap, React.js, Node.js, MongoDB, Django, and Data Science.