Skip to content
geeksforgeeks
  • Courses
    • DSA to Development
    • Get IBM Certification
    • Newly Launched!
      • Master Django Framework
      • Become AWS Certified
    • For Working Professionals
      • Interview 101: DSA & System Design
      • Data Science Training Program
      • JAVA Backend Development (Live)
      • DevOps Engineering (LIVE)
      • Data Structures & Algorithms in Python
    • For Students
      • Placement Preparation Course
      • Data Science (Live)
      • Data Structure & Algorithm-Self Paced (C++/JAVA)
      • Master Competitive Programming (Live)
      • Full Stack Development with React & Node JS (Live)
    • Full Stack Development
    • Data Science Program
    • All Courses
  • Tutorials
    • Data Structures & Algorithms
    • ML & Data Science
    • Interview Corner
    • Programming Languages
    • Web Development
    • CS Subjects
    • DevOps And Linux
    • School Learning
  • Practice
    • Build your AI Agent
    • GfG 160
    • Problem of the Day
    • Practice Coding Problems
    • GfG SDE Sheet
  • Contests
    • Accenture Hackathon (Ending Soon!)
    • GfG Weekly [Rated Contest]
    • Job-A-Thon Hiring Challenge
    • All Contests and Events
  • DSA
  • Interview Problems on Hash
  • Practice Hash
  • MCQs on Hash
  • Hashing Tutorial
  • Hash Function
  • Index Mapping
  • Collision Resolution
  • Open Addressing
  • Separate Chaining
  • Quadratic probing
  • Double Hashing
  • Load Factor and Rehashing
  • Advantage & Disadvantage
Open In App
Next Article:
Smallest subarray with k distinct numbers
Next article icon

Sorting using trivial hash function

Last Updated : 19 Apr, 2023
Comments
Improve
Suggest changes
Like Article
Like
Report

We have read about various sorting algorithms such as heap sort, bubble sort, merge sort and others. 
Here we will see how can we sort N elements using a hash array. But this algorithm has a limitation. We can sort only those N elements, where the value of elements is not large (typically not above 10^6).

Examples:  

Input :  9 4 3 5 8 
Output : 3 4 5 8 9

Explanation of sorting using hash:

  • Step 1: Create a hash array of size(max_element), since that is the maximum we will need 
  • Step 2: Traverse through all the elements and keep a count of number of occurrence of a particular element. 
  • Step 3: After keeping a count of occurrence of all elements in the hash table, simply iterate from 0 to max_element in the hash array 
  • Step 4: While iterating in the hash array, if we find the value stored at any hash position is more than 0, which indicated that the element is present at least once in the original list of elements. 
  • Step 5: Hash[i] has the count of the number of times an element is present in the list, so when its >0, we print those number of times the element. 
     
  • If you want to store the elements, use another array to store them in a sorted way. 
  • If we want to sort it in descending order, we simply traverse from max to 0 and repeat the same procedure.

Below is the implementation of the above approach: 

C++




// C++ program to sort an array using hash
// function
#include <bits/stdc++.h>
using namespace std;
 
void sortUsingHash(int a[], int n)
{
    // find the maximum element
    int max = *std::max_element(a, a + n);
 
    // create a hash function upto the max size
    int hash[max + 1] = { 0 };
 
    // traverse through all the elements and
    // keep a count
    for (int i = 0; i < n; i++)
        hash[a[i]] += 1;
 
    // Traverse upto all elements and check if
    // it is present or not. If it is present,
    // then print the element the number of times
    // it's present. Once we have printed n times,
    // that means we have printed n elements
    // so break out of the loop
    for (int i = 0; i <= max; i++) {
 
        // if present
        if (hash[i]) {
 
            // print the element that number of
            // times it's present
            for (int j = 0; j < hash[i]; j++) {
                cout << i << " ";
            }
        }
    }
}
 
// driver program
int main()
{
    int a[] = { 9, 4, 3,  2,  5,  2,  1,  0, 4,
                3, 5, 10, 15, 12, 18, 20, 19 };
    int n = sizeof(a) / sizeof(a[0]);
 
    sortUsingHash(a, n);
    return 0;
}
 
 

Java




// Java program to sort an array using hash
// function
import java.util.*;
 
class GFG {
 
    static void sortUsingHash(int a[], int n)
    {
        // find the maximum element
        int max = Arrays.stream(a).max().getAsInt();
 
        // create a hash function upto the max size
        int hash[] = new int[max + 1];
 
        // traverse through all the elements and
        // keep a count
        for (int i = 0; i < n; i++)
            hash[a[i]] += 1;
 
        // Traverse upto all elements and check if
        // it is present or not. If it is present,
        // then print the element the number of times
        // it's present. Once we have printed n times,
        // that means we have printed n elements
        // so break out of the loop
        for (int i = 0; i <= max; i++) {
 
            // if present
            if (hash[i] != 0) {
 
                // print the element that number of
                // times it's present
                for (int j = 0; j < hash[i]; j++) {
                    System.out.print(i + " ");
                }
            }
        }
    }
 
    // Driver code
    public static void main(String[] args)
    {
        int a[] = { 9, 4, 3,  2,  5,  2,  1,  0, 4,
                    3, 5, 10, 15, 12, 18, 20, 19 };
        int n = a.length;
 
        sortUsingHash(a, n);
    }
}
 
// This code contributed by Rajput-Ji
 
 

Python3




# Python3 program to sort an array
# using hash function
 
 
def sortUsingHash(a, n):
 
    # find the maximum element
    Max = max(a)
 
    # create a hash function upto
    # the max size
    Hash = [0] * (Max + 1)
 
    # traverse through all the elements
    # and keep a count
    for i in range(0, n):
        Hash[a[i]] += 1
 
    # Traverse upto all elements and check
    # if it is present or not. If it is
    # present, then print the element the
    # number of times it's present. Once we
    # have printed n times, that means we
    # have printed n elements so break out
    # of the loop
    for i in range(0, Max + 1):
 
        # if present
        if Hash[i] != 0:
 
            # print the element that number
            # of times it's present
            for j in range(0, Hash[i]):
                print(i, end=" ")
 
 
# Driver Code
if __name__ == "__main__":
 
    a = [9, 4, 3, 2, 5, 2, 1, 0, 4,
         3, 5, 10, 15, 12, 18, 20, 19]
    n = len(a)
 
    sortUsingHash(a, n)
 
# This code is contributed by Rituraj Jain
 
 

C#




// C# program to sort an array using hash
// function
using System;
using System.Linq;
 
class GFG {
 
    static void sortUsingHash(int[] a, int n)
    {
        // find the maximum element
        int max = a.Max();
 
        // create a hash function upto the max size
        int[] hash = new int[max + 1];
 
        // traverse through all the elements and
        // keep a count
        for (int i = 0; i < n; i++)
            hash[a[i]] += 1;
 
        // Traverse upto all elements and check if
        // it is present or not. If it is present,
        // then print the element the number of times
        // it's present. Once we have printed n times,
        // that means we have printed n elements
        // so break out of the loop
        for (int i = 0; i <= max; i++) {
 
            // if present
            if (hash[i] != 0) {
 
                // print the element that number of
                // times it's present
                for (int j = 0; j < hash[i]; j++) {
                    Console.Write(i + " ");
                }
            }
        }
    }
 
    // Driver code
    public static void Main(String[] args)
    {
        int[] a = { 9, 4, 3,  2,  5,  2,  1,  0, 4,
                    3, 5, 10, 15, 12, 18, 20, 19 };
        int n = a.Length;
 
        sortUsingHash(a, n);
    }
}
 
/* This code contributed by PrinciRaj1992 */
 
 

Javascript




<script>
// javascript program to sort an array using hash
// function
 
    function sortUsingHash(a, n) {
        // find the maximum element
        var max = Math.max.apply(Math, a);
 
        // create a hash function upto the max size
        var hash = Array(max + 1).fill(0);
 
        // traverse through all the elements and
        // keep a count
        for (i = 0; i < n; i++)
            hash[a[i]] += 1;
 
        // Traverse upto all elements and check if
        // it is present or not. If it is present,
        // then print the element the number of times
        // it's present. Once we have printed n times,
        // that means we have printed n elements
        // so break out of the loop
        for (i = 0; i <= max; i++) {
 
            // if present
            if (hash[i] != 0) {
 
                // print the element that number of
                // times it's present
                for (j = 0; j < hash[i]; j++) {
                    document.write(i + " ");
                }
            }
        }
    }
 
    // Driver code
     
        var a = [ 9, 4, 3, 2, 5, 2, 1, 0, 4, 3, 5, 10, 15, 12, 18, 20, 19 ];
        var n = a.length;
 
        sortUsingHash(a, n);
 
// This code contributed by Rajput-Ji
</script>
 
 
Output
0 1 2 2 3 3 4 4 5 5 9 10 12 15 18 19 20 

Time Complexity: O(max*n), where max is maximum element and n is the length of given array
Auxiliary Space: O(max)
 

How to handle negative numbers? 

In case the array has negative numbers and positive numbers, we keep two hash arrays to keep a track of positive and negative elements.

Explanation of sorting using hashing if the array has negative and positive numbers: 

  • Step 1: Create two hash arrays, one for positive and the other for negative 
  • Step 2: the positive hash array will have a size of max and the negative array will have a size of min 
  • Step 3: traverse from min to 0 in the negative hash array, and print the elements in the same way we did for positives. 
  • Step 4: Traverse from 0 to max for positive elements and print them in the same manner as explained above. 

Below is the implementation of the above approach: 

C++




// C++ program to sort an array using hash
// function with negative values allowed.
#include <bits/stdc++.h>
using namespace std;
 
void sortUsingHash(int a[], int n)
{
    // find the maximum element
    int max = *std::max_element(a, a + n);
    int min = abs(*std::min_element(a, a + n));
 
    // create a hash function upto the max size
    int hashpos[max + 1] = { 0 };
    int hashneg[min + 1] = { 0 };
 
    // traverse through all the elements and
    // keep a count
    for (int i = 0; i < n; i++) {
        if (a[i] >= 0)
            hashpos[a[i]] += 1;
        else
            hashneg[abs(a[i])] += 1;
    }
 
    // Traverse up to all negative elements and
    // check if it is present or not. If it is
    // present, then print the element the number
    // of times it's present. Once we have printed
    // n times, that means we have printed n elements
    // so break out of the loop
    for (int i = min; i > 0; i--) {
        if (hashneg[i]) {
 
            // print the element that number of times
            // it's present. Print the negative element
            for (int j = 0; j < hashneg[i]; j++) {
                cout << (-1) * i << " ";
            }
        }
    }
 
    // Traverse upto all elements and check if it is
    // present or not. If it is present, then print
    // the element the number of times it's present
    // once we have printed n times, that means we
    // have printed n elements, so break out of the
    // loop
    for (int i = 0; i <= max; i++) {
 
        // if present
        if (hashpos[i]) {
 
            // print the element that number of times
            // it's present
            for (int j = 0; j < hashpos[i]; j++) {
                cout << i << " ";
            }
        }
    }
}
 
// driver program to test the above function
int main()
{
    int a[] = { -1, -2, -3, -4, -5, -6, 8,
                7,  5,  4,  3,  2,  1,  0 };
    int n = sizeof(a) / sizeof(a[0]);
    sortUsingHash(a, n);
    return 0;
}
 
 

Java




// Java program to sort an array using hash
// function with negative values allowed.
import java.util.Arrays;
class GFG {
 
    static int absolute(int x)
    {
        if (x < 0)
            return (-1 * x);
        return x;
    }
 
    static void sortUsingHash(int a[], int n)
    {
        // find the maximum element
        int max = Arrays.stream(a).max().getAsInt();
        int min
            = absolute(Arrays.stream(a).min().getAsInt());
 
        // create a hash function upto the max size
        int hashpos[] = new int[max + 1];
        int hashneg[] = new int[min + 1];
 
        // traverse through all the elements and
        // keep a count
        for (int i = 0; i < n; i++) {
            if (a[i] >= 0)
                hashpos[a[i]] += 1;
            else
                hashneg[absolute(a[i])] += 1;
        }
 
        // Traverse up to all negative elements and
        // check if it is present or not. If it is
        // present, then print the element the number
        // of times it's present. Once we have printed
        // n times, that means we have printed n elements
        // so break out of the loop
        for (int i = min; i > 0; i--) {
            if (hashneg[i] > 0) {
 
                // print the element that number of times
                // it's present. Print the negative element
                for (int j = 0; j < hashneg[i]; j++) {
                    System.out.print((-1) * i + " ");
                }
            }
        }
 
        // Traverse upto all elements and check if it is
        // present or not. If it is present, then print
        // the element the number of times it's present
        // once we have printed n times, that means we
        // have printed n elements, so break out of the
        // loop
        for (int i = 0; i <= max; i++) {
 
            // if present
            if (hashpos[i] > 0) {
 
                // print the element that number of times
                // it's present
                for (int j = 0; j < hashpos[i]; j++) {
                    System.out.print(i + " ");
                }
            }
        }
    }
 
    // Driver program to test the above function
    public static void main(String[] args)
    {
        int a[] = { -1, -2, -3, -4, -5, -6, 8,
                    7,  5,  4,  3,  2,  1,  0 };
        int n = a.length;
        sortUsingHash(a, n);
    }
}
 
// This code has been contributed by 29AjayKumar
 
 

Python3




# Python3 program to sort an array using hash
# function with negative values allowed.
 
 
def sortUsingHash(a, n):
 
    # find the maximum element
    Max = max(a)
    Min = abs(min(a))
 
    # create a hash function upto the max size
    hashpos = [0] * (Max + 1)
    hashneg = [0] * (Min + 1)
 
    # traverse through all the elements and
    # keep a count
    for i in range(0, n):
        if a[i] >= 0:
            hashpos[a[i]] += 1
        else:
            hashneg[abs(a[i])] += 1
 
    # Traverse up to all negative elements
    # and check if it is present or not.
    # If it is present, then print the
    # element the number of times it's present.
    # Once we have printed n times, that means
    # we have printed n elements so break out
    # of the loop
    for i in range(Min, 0, -1):
        if hashneg[i] != 0:
 
            # print the element that number of times
            # it's present. Print the negative element
            for j in range(0, hashneg[i]):
                print((-1) * i, end=" ")
 
    # Traverse upto all elements and check if
    # it is present or not. If it is present,
    # then print the element the number of
    # times it's present once we have printed
    # n times, that means we have printed n
    # elements, so break out of the loop
    for i in range(0, Max + 1):
 
        # if present
        if hashpos[i] != 0:
 
            # print the element that number
            # of times it's present
            for j in range(0, hashpos[i]):
                print(i, end=" ")
 
 
# Driver Code
if __name__ == "__main__":
 
    a = [-1, -2, -3, -4, -5, -6,
         8, 7, 5, 4, 3, 2, 1, 0]
 
    n = len(a)
    sortUsingHash(a, n)
 
# This code is contributed by Rituraj Jain
 
 

C#




// C# program to sort an array using hash
// function with negative values allowed.
using System;
using System.Linq;
 
class GFG {
 
    static int absolute(int x)
    {
        if (x < 0)
            return (-1 * x);
        return x;
    }
 
    static void sortUsingHash(int[] a, int n)
    {
        // find the maximum element
        int max = a.Max();
        int min = absolute(a.Min());
 
        // create a hash function upto the max size
        int[] hashpos = new int[max + 1];
        int[] hashneg = new int[min + 1];
 
        // traverse through all the elements and
        // keep a count
        for (int i = 0; i < n; i++) {
            if (a[i] >= 0)
                hashpos[a[i]] += 1;
            else
                hashneg[absolute(a[i])] += 1;
        }
 
        // Traverse up to all negative elements and
        // check if it is present or not. If it is
        // present, then print the element the number
        // of times it's present. Once we have printed
        // n times, that means we have printed n elements
        // so break out of the loop
        for (int i = min; i > 0; i--) {
            if (hashneg[i] > 0) {
 
                // print the element that number of times
                // it's present. Print the negative element
                for (int j = 0; j < hashneg[i]; j++) {
                    Console.Write((-1) * i + " ");
                }
            }
        }
 
        // Traverse upto all elements and check if it is
        // present or not. If it is present, then print
        // the element the number of times it's present
        // once we have printed n times, that means we
        // have printed n elements, so break out of the
        // loop
        for (int i = 0; i <= max; i++) {
 
            // if present
            if (hashpos[i] > 0) {
 
                // print the element that number of times
                // it's present
                for (int j = 0; j < hashpos[i]; j++) {
                    Console.Write(i + " ");
                }
            }
        }
    }
 
    // Driver code
    public static void Main(String[] args)
    {
        int[] a = { -1, -2, -3, -4, -5, -6, 8,
                    7,  5,  4,  3,  2,  1,  0 };
        int n = a.Length;
        sortUsingHash(a, n);
    }
}
 
/* This code contributed by PrinciRaj1992 */
 
 

Javascript




<script>
// javascript program to sort an array using hash
// function with negative values allowed.
 
 
function absolute(int x){
    if(x<0)    return (-1*x);
    return x;
}
 
    function sortUsingHash(a, n) {
        // find the maximum element
        var max = Math.max.apply(Math, a);
        var min = absolute(Math.min.apply(Math, a));
 
        // create a hash function upto the max size
        var hashpos =  Array(max).fill(0);
        var hashneg = Array(min + 1).fill(0);
 
        // traverse through all the elements and
        // keep a count
        for (i = 0; i < n; i++) {
            if (a[i] >= 0)
                hashpos[a[i]] += 1;
            else
                hashneg[absolute(a[i])] += 1;
        }
 
        // Traverse up to all negative elements and
        // check if it is present or not. If it is
        // present, then print the element the number
        // of times it's present. Once we have printed
        // n times, that means we have printed n elements
        // so break out of the loop
        for (i = min; i > 0; i--) {
            if (hashneg[i] > 0) {
 
                // print the element that number of times
                // it's present. Print the negative element
                for (j = 0; j < hashneg[i]; j++) {
                    document.write((-1) * i + " ");
                }
            }
        }
 
        // Traverse upto all elements and check if it is
        // present or not. If it is present, then print
        // the element the number of times it's present
        // once we have printed n times, that means we
        // have printed n elements, so break out of the
        // loop
        for (i = 0; i <= max; i++) {
 
            // if present
            if (hashpos[i] > 0) {
 
                // print the element that number of times
                // it's present
                for (j = 0; j < hashpos[i]; j++) {
                    document.write(i + " ");
                }
            }
        }
    }
 
    // Driver program to test the above function
     
        var a = [ -1, -2, -3, -4, -5, -6, 8, 7, 5, 4, 3, 2, 1, 0 ];
        var n = a.length;
        sortUsingHash(a, n);
 
// This code contributed by Rajput-Ji
</script>
 
 
Output
-6 -5 -4 -3 -2 -1 0 1 2 3 4 5 7 8 

Complexity: 
Time complexity- The time complexity of this program is O(n + max), where n is the size of the input array and max is the maximum element in the array. This is because the program first finds the maximum element in the array using std::max_element, which takes O(n) time. It then creates two hash arrays of size max+1 and min+1, where min is the absolute value of the minimum element in the array. This takes O(max+min) time, but since min is always less than or equal to max, we can simplify this to O(max). The program then traverses through the input array once to fill in the hash arrays, which takes O(n) time. Finally, the program traverses through the two hash arrays, printing out the elements in sorted order. This takes O(max) time, since max is the size of the hash arrays. Therefore, the total time complexity of the program is O(n + max).

Space complexity –The space complexity of this program is O(max), since the program creates two hash arrays of size max+1 and min+1, where min is the absolute value of the minimum element in the array. However, since min is always less than or equal to max, we can simplify this to O(max). Therefore, the space complexity of the program is O(max).

Limitations: 

  1. Can only sort array elements of limited range (typically from -10^6 to +10^6) 
  2. Auxiliary space in worst cases is O(max_element) + O(min_element)


Next Article
Smallest subarray with k distinct numbers

S

Striver
Improve
Article Tags :
  • DSA
  • Hash
  • Sorting
  • Technical Scripter
  • limited-range-elements
Practice Tags :
  • Hash
  • Sorting

Similar Reads

  • Hashing in Data Structure
    Hashing is a technique used in data structures that efficiently stores and retrieves data in a way that allows for quick access. Hashing involves mapping data to a specific index in a hash table (an array of items) using a hash function. It enables fast retrieval of information based on its key. The
    3 min read
  • Introduction to Hashing
    Hashing refers to the process of generating a small sized output (that can be used as index in a table) from an input of typically large and variable size. Hashing uses mathematical formulas known as hash functions to do the transformation. This technique determines an index or location for the stor
    7 min read
  • What is Hashing?
    Hashing refers to the process of generating a fixed-size output from an input of variable size using the mathematical formulas known as hash functions. This technique determines an index or location for the storage of an item in a data structure. Need for Hash data structureThe amount of data on the
    3 min read
  • Index Mapping (or Trivial Hashing) with negatives allowed
    Index Mapping (also known as Trivial Hashing) is a simple form of hashing where the data is directly mapped to an index in a hash table. The hash function used in this method is typically the identity function, which maps the input data to itself. In this case, the key of the data is used as the ind
    7 min read
  • Separate Chaining Collision Handling Technique in Hashing
    Separate Chaining is a collision handling technique. Separate chaining is one of the most popular and commonly used techniques in order to handle collisions. In this article, we will discuss about what is Separate Chain collision handling technique, its advantages, disadvantages, etc. There are main
    4 min read
  • Open Addressing Collision Handling technique in Hashing
    Open Addressing is a method for handling collisions. In Open Addressing, all elements are stored in the hash table itself. So at any point, the size of the table must be greater than or equal to the total number of keys (Note that we can increase table size by copying old data if needed). This appro
    7 min read
  • Double Hashing
    Double hashing is a collision resolution technique used in hash tables. It works by using two hash functions to compute two different hash values for a given key. The first hash function is used to compute the initial hash value, and the second hash function is used to compute the step size for the
    15+ min read
  • Load Factor and Rehashing
    Prerequisites: Hashing Introduction and Collision handling by separate chaining How hashing works: For insertion of a key(K) - value(V) pair into a hash map, 2 steps are required: K is converted into a small integer (called its hash code) using a hash function.The hash code is used to find an index
    15+ min read
  • Easy problems on Hashing

    • Check if an array is subset of another array
      Given two arrays a[] and b[] of size m and n respectively, the task is to determine whether b[] is a subset of a[]. Both arrays are not sorted, and elements are distinct. Examples: Input: a[] = [11, 1, 13, 21, 3, 7], b[] = [11, 3, 7, 1] Output: true Input: a[]= [1, 2, 3, 4, 5, 6], b = [1, 2, 4] Outp
      13 min read

    • Union and Intersection of two Linked List using Hashing
      Given two singly Linked Lists, create union and intersection lists that contain the union and intersection of the elements present in the given lists. Each of the two linked lists contains distinct node values.Note: The order of elements in output lists doesn’t matter. Examples: Input:head1 : 10 -
      10 min read

    • Two Sum - Pair with given Sum
      Given an array arr[] of n integers and a target value, the task is to find whether there is a pair of elements in the array whose sum is equal to target. This problem is a variation of 2Sum problem. Examples: Input: arr[] = [0, -1, 2, -3, 1], target = -2Output: trueExplanation: There is a pair (1, -
      15+ min read

    • Max Distance Between Two Occurrences
      Given an array arr[], the task is to find the maximum distance between two occurrences of any element. If no element occurs twice, return 0. Examples: Input: arr = [1, 1, 2, 2, 2, 1]Output: 5Explanation: distance for 1 is: 5-0 = 5, distance for 2 is: 4-2 = 2, So max distance is 5. Input : arr[] = [3
      8 min read

    • Most frequent element in an array
      Given an array, the task is to find the most frequent element in it. If there are multiple elements that appear a maximum number of times, return the maximum element. Examples: Input : arr[] = [1, 3, 2, 1, 4, 1]Output : 1Explanation: 1 appears three times in array which is maximum frequency. Input :
      10 min read

    • Only Repeating From 1 To n-1
      Given an array arr[] of size n filled with numbers from 1 to n-1 in random order. The array has only one repetitive element. The task is to find the repetitive element. Examples: Input: arr[] = [1, 3, 2, 3, 4]Output: 3Explanation: The number 3 is the only repeating element. Input: arr[] = [1, 5, 1,
      15+ min read

    • Check for Disjoint Arrays or Sets
      Given two arrays a and b, check if they are disjoint, i.e., there is no element common between both the arrays. Examples: Input: a[] = {12, 34, 11, 9, 3}, b[] = {2, 1, 3, 5} Output: FalseExplanation: 3 is common in both the arrays. Input: a[] = {12, 34, 11, 9, 3}, b[] = {7, 2, 1, 5} Output: True Exp
      12 min read

    • Non-overlapping sum of two sets
      Given two arrays A[] and B[] of size n. It is given that both array individually contains distinct elements. We need to find the sum of all elements that are not common. Examples: Input : A[] = {1, 5, 3, 8} B[] = {5, 4, 6, 7}Output : 291 + 3 + 4 + 6 + 7 + 8 = 29Input : A[] = {1, 5, 3, 8} B[] = {5, 1
      9 min read

    • Check if two arrays are equal or not
      Given two arrays, a and b of equal length. The task is to determine if the given arrays are equal or not. Two arrays are considered equal if: Both arrays contain the same set of elements.The arrangements (or permutations) of elements may be different.If there are repeated elements, the counts of eac
      6 min read

    • Find missing elements of a range
      Given an array, arr[0..n-1] of distinct elements and a range [low, high], find all numbers that are in a range, but not the array. The missing elements should be printed in sorted order. Examples: Input: arr[] = {10, 12, 11, 15}, low = 10, high = 15Output: 13, 14Input: arr[] = {1, 14, 11, 51, 15}, l
      15+ min read

    • Minimum Subsets with Distinct Elements
      You are given an array of n-element. You have to make subsets from the array such that no subset contain duplicate elements. Find out minimum number of subset possible. Examples : Input : arr[] = {1, 2, 3, 4}Output :1Explanation : A single subset can contains all values and all values are distinct.I
      9 min read

    • Remove minimum elements such that no common elements exist in two arrays
      Given two arrays arr1[] and arr2[] consisting of n and m elements respectively. The task is to find the minimum number of elements to remove from each array such that intersection of both arrays becomes empty and both arrays become mutually exclusive. Examples: Input: arr[] = { 1, 2, 3, 4}, arr2[] =
      8 min read

    • 2 Sum - Count pairs with given sum
      Given an array arr[] of n integers and a target value, the task is to find the number of pairs of integers in the array whose sum is equal to target. Examples: Input: arr[] = {1, 5, 7, -1, 5}, target = 6Output: 3Explanation: Pairs with sum 6 are (1, 5), (7, -1) & (1, 5). Input: arr[] = {1, 1, 1,
      10 min read

    • Count quadruples from four sorted arrays whose sum is equal to a given value x
      Given four sorted arrays each of size n of distinct elements. Given a value x. The problem is to count all quadruples(group of four numbers) from all the four arrays whose sum is equal to x.Note: The quadruple has an element from each of the four arrays. Examples: Input : arr1 = {1, 4, 5, 6}, arr2 =
      15+ min read

    • Sort elements by frequency | Set 4 (Efficient approach using hash)
      Print the elements of an array in the decreasing frequency if 2 numbers have the same frequency then print the one which came first. Examples: Input : arr[] = {2, 5, 2, 8, 5, 6, 8, 8} Output : arr[] = {8, 8, 8, 2, 2, 5, 5, 6} Input : arr[] = {2, 5, 2, 6, -1, 9999999, 5, 8, 8, 8} Output : arr[] = {8,
      12 min read

    • Find all pairs (a, b) in an array such that a % b = k
      Given an array with distinct elements, the task is to find the pairs in the array such that a % b = k, where k is a given integer. You may assume that a and b are in small range Examples : Input : arr[] = {2, 3, 5, 4, 7} k = 3Output : (7, 4), (3, 4), (3, 5), (3, 7)7 % 4 = 33 % 4 = 33 % 5 = 33 % 7 =
      15 min read

    • Group words with same set of characters
      Given a list of words with lower cases. Implement a function to find all Words that have the same unique character set. Example: Input: words[] = { "may", "student", "students", "dog", "studentssess", "god", "cat", "act", "tab", "bat", "flow", "wolf", "lambs", "amy", "yam", "balms", "looped", "poodl
      8 min read

    • k-th distinct (or non-repeating) element among unique elements in an array.
      Given an integer array arr[], print kth distinct element in this array. The given array may contain duplicates and the output should print the k-th element among all unique elements. If k is more than the number of distinct elements, print -1. Examples: Input: arr[] = {1, 2, 1, 3, 4, 2}, k = 2Output
      7 min read

    Intermediate problems on Hashing

    • Find Itinerary from a given list of tickets
      Given a list of tickets, find the itinerary in order using the given list. Note: It may be assumed that the input list of tickets is not cyclic and there is one ticket from every city except the final destination. Examples: Input: "Chennai" -> "Bangalore" "Bombay" -> "Delhi" "Goa" -> "Chenn
      11 min read

    • Find number of Employees Under every Manager
      Given a 2d matrix of strings arr[][] of order n * 2, where each array arr[i] contains two strings, where the first string arr[i][0] is the employee and arr[i][1] is his manager. The task is to find the count of the number of employees under each manager in the hierarchy and not just their direct rep
      9 min read

    • Longest Subarray With Sum Divisible By K
      Given an arr[] containing n integers and a positive integer k, he problem is to find the longest subarray's length with the sum of the elements divisible by k. Examples: Input: arr[] = [2, 7, 6, 1, 4, 5], k = 3Output: 4Explanation: The subarray [7, 6, 1, 4] has sum = 18, which is divisible by 3. Inp
      10 min read

    • Longest Subarray with 0 Sum
      Given an array arr[] of size n, the task is to find the length of the longest subarray with sum equal to 0. Examples: Input: arr[] = {15, -2, 2, -8, 1, 7, 10, 23}Output: 5Explanation: The longest subarray with sum equals to 0 is {-2, 2, -8, 1, 7} Input: arr[] = {1, 2, 3}Output: 0Explanation: There i
      10 min read

    • Longest Increasing consecutive subsequence
      Given N elements, write a program that prints the length of the longest increasing consecutive subsequence. Examples: Input : a[] = {3, 10, 3, 11, 4, 5, 6, 7, 8, 12} Output : 6 Explanation: 3, 4, 5, 6, 7, 8 is the longest increasing subsequence whose adjacent element differs by one. Input : a[] = {6
      10 min read

    • Count Distinct Elements In Every Window of Size K
      Given an array arr[] of size n and an integer k, return the count of distinct numbers in all windows of size k. Examples: Input: arr[] = [1, 2, 1, 3, 4, 2, 3], k = 4Output: [3, 4, 4, 3]Explanation: First window is [1, 2, 1, 3], count of distinct numbers is 3. Second window is [2, 1, 3, 4] count of d
      10 min read

    • Design a data structure that supports insert, delete, search and getRandom in constant time
      Design a data structure that supports the following operations in O(1) time. insert(x): Inserts an item x to the data structure if not already present.remove(x): Removes item x from the data structure if present. search(x): Searches an item x in the data structure.getRandom(): Returns a random eleme
      5 min read

    • Subarray with Given Sum - Handles Negative Numbers
      Given an unsorted array of integers, find a subarray that adds to a given number. If there is more than one subarray with the sum of the given number, print any of them. Examples: Input: arr[] = {1, 4, 20, 3, 10, 5}, sum = 33Output: Sum found between indexes 2 and 4Explanation: Sum of elements betwe
      13 min read

    • Implementing our Own Hash Table with Separate Chaining in Java
      All data structure has their own special characteristics, for example, a BST is used when quick searching of an element (in log(n)) is required. A heap or a priority queue is used when the minimum or maximum element needs to be fetched in constant time. Similarly, a hash table is used to fetch, add
      10 min read

    • Implementing own Hash Table with Open Addressing Linear Probing
      In Open Addressing, all elements are stored in the hash table itself. So at any point, size of table must be greater than or equal to total number of keys (Note that we can increase table size by copying old data if needed). Insert(k) - Keep probing until an empty slot is found. Once an empty slot i
      13 min read

    • Maximum possible difference of two subsets of an array
      Given an array of n-integers. The array may contain repetitive elements but the highest frequency of any element must not exceed two. You have to make two subsets such that the difference of the sum of their elements is maximum and both of them jointly contain all elements of the given array along w
      15+ min read

    • Sorting using trivial hash function
      We have read about various sorting algorithms such as heap sort, bubble sort, merge sort and others. Here we will see how can we sort N elements using a hash array. But this algorithm has a limitation. We can sort only those N elements, where the value of elements is not large (typically not above 1
      15+ min read

    • Smallest subarray with k distinct numbers
      We are given an array consisting of n integers and an integer k. We need to find the smallest subarray [l, r] (both l and r are inclusive) such that there are exactly k different numbers. If no such subarray exists, print -1 and If multiple subarrays meet the criteria, return the one with the smalle
      15 min read

geeksforgeeks-footer-logo
Corporate & Communications Address:
A-143, 7th Floor, Sovereign Corporate Tower, Sector- 136, Noida, Uttar Pradesh (201305)
Registered Address:
K 061, Tower K, Gulshan Vivante Apartment, Sector 137, Noida, Gautam Buddh Nagar, Uttar Pradesh, 201305
GFG App on Play Store GFG App on App Store
Advertise with us
  • Company
  • About Us
  • Legal
  • Privacy Policy
  • In Media
  • Contact Us
  • Advertise with us
  • GFG Corporate Solution
  • Placement Training Program
  • Languages
  • Python
  • Java
  • C++
  • PHP
  • GoLang
  • SQL
  • R Language
  • Android Tutorial
  • Tutorials Archive
  • DSA
  • Data Structures
  • Algorithms
  • DSA for Beginners
  • Basic DSA Problems
  • DSA Roadmap
  • Top 100 DSA Interview Problems
  • DSA Roadmap by Sandeep Jain
  • All Cheat Sheets
  • Data Science & ML
  • Data Science With Python
  • Data Science For Beginner
  • Machine Learning
  • ML Maths
  • Data Visualisation
  • Pandas
  • NumPy
  • NLP
  • Deep Learning
  • Web Technologies
  • HTML
  • CSS
  • JavaScript
  • TypeScript
  • ReactJS
  • NextJS
  • Bootstrap
  • Web Design
  • Python Tutorial
  • Python Programming Examples
  • Python Projects
  • Python Tkinter
  • Python Web Scraping
  • OpenCV Tutorial
  • Python Interview Question
  • Django
  • Computer Science
  • Operating Systems
  • Computer Network
  • Database Management System
  • Software Engineering
  • Digital Logic Design
  • Engineering Maths
  • Software Development
  • Software Testing
  • DevOps
  • Git
  • Linux
  • AWS
  • Docker
  • Kubernetes
  • Azure
  • GCP
  • DevOps Roadmap
  • System Design
  • High Level Design
  • Low Level Design
  • UML Diagrams
  • Interview Guide
  • Design Patterns
  • OOAD
  • System Design Bootcamp
  • Interview Questions
  • Inteview Preparation
  • Competitive Programming
  • Top DS or Algo for CP
  • Company-Wise Recruitment Process
  • Company-Wise Preparation
  • Aptitude Preparation
  • Puzzles
  • School Subjects
  • Mathematics
  • Physics
  • Chemistry
  • Biology
  • Social Science
  • English Grammar
  • Commerce
  • World GK
  • GeeksforGeeks Videos
  • DSA
  • Python
  • Java
  • C++
  • Web Development
  • Data Science
  • CS Subjects
@GeeksforGeeks, Sanchhaya Education Private Limited, All rights reserved
We use cookies to ensure you have the best browsing experience on our website. By using our site, you acknowledge that you have read and understood our Cookie Policy & Privacy Policy
Lightbox
Improvement
Suggest Changes
Help us improve. Share your suggestions to enhance the article. Contribute your expertise and make a difference in the GeeksforGeeks portal.
geeksforgeeks-suggest-icon
Create Improvement
Enhance the article with your expertise. Contribute to the GeeksforGeeks community and help create better learning resources for all.
geeksforgeeks-improvement-icon
Suggest Changes
min 4 words, max Words Limit:1000

Thank You!

Your suggestions are valuable to us.

What kind of Experience do you want to share?

Interview Experiences
Admission Experiences
Career Journeys
Work Experiences
Campus Experiences
Competitive Exam Experiences