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
  • Practice Bitwise Algorithms
  • MCQs on Bitwise Algorithms
  • Tutorial on Biwise Algorithms
  • Binary Representation
  • Bitwise Operators
  • Bit Swapping
  • Bit Manipulation
  • Count Set bits
  • Setting a Bit
  • Clear a Bit
  • Toggling a Bit
  • Left & Right Shift
  • Gray Code
  • Checking Power of 2
  • Important Tactics
  • Bit Manipulation for CP
  • Fast Exponentiation
Open In App
Next Article:
Number of primes in a subarray (with updates)
Next article icon

Number whose sum of XOR with given array range is maximum

Last Updated : 23 Feb, 2023
Comments
Improve
Suggest changes
Like Article
Like
Report

You are given a sequence of N integers and Q queries. In each query, you are given two parameters L and R. You have to find the smallest integer X such that 0 <= X < 2^31 and the sum of XOR of x with all elements in range [L, R] is maximum possible.
Examples : 
 

Input  : A = {20, 11, 18, 2, 13}          Three queries as (L, R) pairs          1 3          3 5          2 4 Output : 2147483629          2147483645          2147483645

 

Approach: The binary representation of each element and X, we can observe that each bit is independent and the problem can be solved by iterating over each bit. Now basically for each bit we need to count the number of 1’s and 0’s in the given range, if the number of 1’s are more then you have to set that bit of X to 0 so that the sum is maximum after xor with X else if number of 0’s are more then you have to set that bit of X to 1. If the number of 1’s and 0’s are equal then we can set that bit of X to any one of 1 or 0 because it will not affect the sum, but we have to minimize the value of X so we will take that bit 0.
Now, to optimize the solution we can pre-calculate the count of 1’s at each bit position of the numbers up to that position by making a prefix array this will take O(n) time. Now for each query number of 1’s will be the number of 1’s up to Rth position – number of 1’s up to (L-1)th position.
 

C++




// CPP program to find smallest integer X
// such that sum of its XOR with range is
// maximum.
#include <bits/stdc++.h>
using namespace std;
 
#define MAX 2147483647
int one[100001][32];
 
// Function to make prefix array which
// counts 1's of each bit up to that number
void make_prefix(int A[], int n)
{
    for (int j = 0; j < 32; j++)
        one[0][j] = 0;
 
    // Making a prefix array which sums
    // number of 1's up to that position
    for (int i = 1; i <= n; i++)
    {
        int a = A[i - 1];
        for (int j = 0; j < 32; j++)
        {
            int x = pow(2, j);
 
            // If j-th bit of a number is set then
            // add one to previously counted 1's
            if (a & x)
                one[i][j] = 1 + one[i - 1][j];
            else
                one[i][j] = one[i - 1][j];
        }
    }
}
 
// Function to find X
int Solve(int L, int R)
{
    int l = L, r = R;
    int tot_bits = r - l + 1;
 
    // Initially taking maximum value all bits 1
    int X = MAX;
 
    // Iterating over each bit
    for (int i = 0; i < 31; i++)
    {
 
        // get 1's at ith bit between the
        // range L-R by subtracting 1's till
        // Rth number - 1's till L-1th number
        int x = one[r][i] - one[l - 1][i];
 
        // If 1's are more than or equal to 0's
        // then unset the ith bit from answer
        if (x >= tot_bits - x)
        {
            int ith_bit = pow(2, i);
 
            // Set ith bit to 0 by doing
            // Xor with 1
            X = X ^ ith_bit;
        }
    }
    return X;
}
 
// Driver program
int main()
{
    // Taking inputs
    int n = 5, q = 3;
    int A[] = { 210, 11, 48, 22, 133 };
    int L[] = { 1, 4, 2 }, R[] = { 3, 14, 4 };
 
    make_prefix(A, n);
 
    for (int j = 0; j < q; j++)
        cout << Solve(L[j], R[j]) << endl;
 
    return 0;
}
 
 

Java




// Java program to find smallest integer X
// such that sum of its XOR with range is
// maximum.
import java.lang.Math;
 
class GFG {
     
    private static final int MAX = 2147483647;
    static int[][] one = new int[100001][32];
     
    // Function to make prefix array which counts
    // 1's of each bit up to that number
    static void make_prefix(int A[], int n)
    {
        for (int j = 0; j < 32; j++)
            one[0][j] = 0;
 
        // Making a prefix array which sums
        // number of 1's up to that position
        for (int i = 1; i <= n; i++)
        {
            int a = A[i - 1];
            for (int j = 0; j < 32; j++)
            {
                int x = (int)Math.pow(2, j);
 
                // If j-th bit of a number is set then
                // add one to previously counted 1's
                if ((a & x) != 0)
                    one[i][j] = 1 + one[i - 1][j];
                else
                    one[i][j] = one[i - 1][j];
            }
        }
    }
 
    // Function to find X
    static int Solve(int L, int R)
    {
        int l = L, r = R;
        int tot_bits = r - l + 1;
 
        // Initially taking maximum
        // value all bits 1
        int X = MAX;
 
        // Iterating over each bit
        for (int i = 0; i < 31; i++)
        {
 
            // get 1's at ith bit between the range
            // L-R by subtracting 1's till
            // Rth number - 1's till L-1th number
            int x = one[r][i] - one[l - 1][i];
 
            // If 1's are more than or equal to 0's
            // then unset the ith bit from answer
            if (x >= tot_bits - x)
            {
                int ith_bit = (int)Math.pow(2, i);
 
                // Set ith bit to 0 by
                // doing Xor with 1
                X = X ^ ith_bit;
            }
        }
        return X;
    }
 
    // Driver program
    public static void main(String[] args)
    {
        // Taking inputs
        int n = 5, q = 3;
        int A[] = { 210, 11, 48, 22, 133 };
        int L[] = { 1, 4, 2 }, R[] = { 3, 14, 4 };
 
        make_prefix(A, n);
 
        for (int j = 0; j < q; j++)
            System.out.println(Solve(L[j], R[j]));
    }
}
 
// This code is contributed by Smitha
 
 

Python3




# Python3 program to find smallest integer X
# such that sum of its XOR with range is
# maximum.
import math
 
one = [[0 for x in range(32)]
      for y in range(100001)]
MAX = 2147483647
 
# Function to make prefix array
# which counts 1's of each bit
# up to that number
def make_prefix(A, n) :
    global one, MAX
     
    for j in range(0 , 32) :
        one[0][j] = 0
 
    # Making a prefix array which
    # sums number of 1's up to
    # that position
    for i in range(1, n+1) :
        a = A[i - 1]
        for j in range(0 , 32) :
         
            x = int(math.pow(2, j))
 
            # If j-th bit of a number
            # is set then add one to
            # previously counted 1's
            if (a & x) :
                one[i][j] = 1 + one[i - 1][j]
            else :
                one[i][j] = one[i - 1][j]
         
# Function to find X
def Solve(L, R) :
 
    global one, MAX
    l = L
    r = R
    tot_bits = r - l + 1
 
    # Initially taking maximum
    # value all bits 1
    X = MAX
 
    # Iterating over each bit
    for i in range(0, 31) :
     
        # get 1's at ith bit between the
        # range L-R by subtracting 1's till
        # Rth number - 1's till L-1th number
         
        x = one[r][i] - one[l - 1][i]
 
        # If 1's are more than or equal
        # to 0's then unset the ith bit
        # from answer
        if (x >= (tot_bits - x)) :
             
            ith_bit = pow(2, i)
 
            # Set ith bit to 0 by
            # doing Xor with 1
            X = X ^ ith_bit
    return X
 
# Driver Code
n = 5
q = 3
A = [ 210, 11, 48, 22, 133 ]
L = [ 1, 4, 2 ]
R = [ 3, 14, 4 ]
 
make_prefix(A, n)
 
for j in range(0, q) :
    print (Solve(L[j], R[j]),end="\n")
     
# This code is contributed by
# Manish Shaw(manishshaw1)
 
 

C#




// C# program to find smallest integer X
// such that sum of its XOR with range is
// maximum.
using System;
using System.Collections.Generic;
 
class GFG{
    static int MAX = 2147483647;
    static int [,]one = new int[100001,32];
     
    // Function to make prefix
    // array which counts 1's
    // of each bit up to that number
    static void make_prefix(int []A, int n)
    {
        for (int j = 0; j < 32; j++)
            one[0,j] = 0;
     
        // Making a prefix array which sums
        // number of 1's up to that position
        for (int i = 1; i <= n; i++)
        {
            int a = A[i - 1];
            for (int j = 0; j < 32; j++)
            {
                int x = (int)Math.Pow(2, j);
     
                // If j-th bit of a number is set then
                // add one to previously counted 1's
                if ((a & x) != 0)
                    one[i, j] = 1 + one[i - 1, j];
                else
                    one[i,j] = one[i - 1, j];
            }
        }
    }
     
    // Function to find X
    static int Solve(int L, int R)
    {
        int l = L, r = R;
        int tot_bits = r - l + 1;
     
        // Initially taking maximum
        // value all bits 1
        int X = MAX;
     
        // Iterating over each bit
        for (int i = 0; i < 31; i++)
        {
     
            // get 1's at ith bit between the
            // range L-R by subtracting 1's till
            // Rth number - 1's till L-1th number
            int x = one[r, i] - one[l - 1, i];
     
            // If 1's are more than or
            // equal to 0's then unset
            // the ith bit from answer
            if (x >= tot_bits - x)
            {
                int ith_bit = (int)Math.Pow(2, i);
     
                // Set ith bit to 0 by doing
                // Xor with 1
                X = X ^ ith_bit;
            }
        }
        return X;
    }
     
    // Driver Code
    public static void Main()
    {
         
        // Taking inputs
        int n = 5, q = 3;
        int []A = {210, 11, 48, 22, 133};
        int []L = {1, 4, 2};
        int []R = {3, 14, 4};
     
        make_prefix(A, n);
     
        for (int j = 0; j < q; j++)
            Console.WriteLine(Solve(L[j], R[j]));
    }
}
 
// This code is contributed by
// Manish Shaw (manishshaw1)
 
 

PHP




<?php
error_reporting(0);
// PHP program to find smallest integer X
// such that sum of its XOR with range is
// maximum.
 
$one = array();
$MAX = 2147483647;
 
// Function to make prefix array
// which counts 1's of each bit
// up to that number
function make_prefix($A, $n)
{
    global $one, $MAX;
     
    for ($j = 0; $j < 32; $j++)
        $one[0][$j] = 0;
 
    // Making a prefix array which
    // sums number of 1's up to
    // that position
    for ($i = 1; $i <= $n; $i++)
    {
        $a = $A[$i - 1];
        for ($j = 0; $j < 32; $j++)
        {
            $x = pow(2, $j);
 
            // If j-th bit of a number
            // is set then add one to
            // previously counted 1's
            if ($a & $x)
                $one[$i][$j] = 1 + $one[$i - 1][$j];
            else
                $one[$i][$j] = $one[$i - 1][$j];
        }
    }
}
 
// Function to find X
function Solve($L, $R)
{
    global $one, $MAX;
    $l = $L; $r = $R;
    $tot_bits = $r - $l + 1;
 
    // Initially taking maximum
    // value all bits 1
    $X = $MAX;
 
    // Iterating over each bit
    for ($i = 0; $i < 31; $i++)
    {
        // get 1's at ith bit between the
        // range L-R by subtracting 1's till
        // Rth number - 1's till L-1th number
         
        $x = $one[$r][$i] - $one[$l - 1][$i];
 
        // If 1's are more than or equal
        // to 0's then unset the ith bit
        // from answer
        if ($x >= ($tot_bits - $x))
        {
            $ith_bit = pow(2, $i);
 
            // Set ith bit to 0 by
            // doing Xor with 1
            $X = $X ^ $ith_bit;
        }
    }
    return $X;
}
 
// Driver Code
$n = 5; $q = 3;
$A = [ 210, 11, 48, 22, 133 ];
$L = [ 1, 4, 2 ];
$R = [ 3, 14, 4 ];
 
make_prefix($A, $n);
 
for ($j = 0; $j < $q; $j++)
    echo (Solve($L[$j], $R[$j]). "\n");
     
// This code is contributed by
// Manish Shaw(manishshaw1)
?>
 
 

Javascript




<script>
// Javascript program to find smallest integer X
// such that sum of its XOR with range is
// maximum.
 
const MAX = 2147483647;
let one = new Array(100001);
for (let i = 0; i < 100001; i++)
    one[i] = new Array(32);
 
// Function to make prefix array which
// counts 1's of each bit up to that number
function make_prefix(A, n)
{
    for (let j = 0; j < 32; j++)
        one[0][j] = 0;
 
    // Making a prefix array which sums
    // number of 1's up to that position
    for (let i = 1; i <= n; i++)
    {
        let a = A[i - 1];
        for (let j = 0; j < 32; j++)
        {
            let x = Math.pow(2, j);
 
            // If j-th bit of a number is set then
            // add one to previously counted 1's
            if (a & x)
                one[i][j] = 1 + one[i - 1][j];
            else
                one[i][j] = one[i - 1][j];
        }
    }
}
 
// Function to find X
function Solve(L, R)
{
    let l = L, r = R;
    let tot_bits = r - l + 1;
 
    // Initially taking maximum value all bits 1
    let X = MAX;
 
    // Iterating over each bit
    for (let i = 0; i < 31; i++)
    {
 
        // get 1's at ith bit between the
        // range L-R by subtracting 1's till
        // Rth number - 1's till L-1th number
        let x = one[r][i] - one[l - 1][i];
 
        // If 1's are more than or equal to 0's
        // then unset the ith bit from answer
        if (x >= tot_bits - x)
        {
            let ith_bit = Math.pow(2, i);
 
            // Set ith bit to 0 by doing
            // Xor with 1
            X = X ^ ith_bit;
        }
    }
    return X;
}
 
// Driver program
    // Taking inputs
    let n = 5, q = 3;
    let A = [ 210, 11, 48, 22, 133 ];
    let L = [ 1, 4, 2 ], R = [ 3, 14, 4 ];
 
    make_prefix(A, n);
 
    for (let j = 0; j < q; j++)
        document.write(Solve(L[j], R[j]) + "<br>");
 
</script>
 
 

Output : 
 

2147483629 2147483647 2147483629

Time complexity: O(n)

Auxiliary Space: O(n)

Approach 2 :

From the below table you can see that if we are given a number n, our answer would “N-n”, where N is all 1s.
And we can get n (which is sum of all integers from A[i] to A[j])  using “prefixSum[j] – prefixSum[i]”.

Number (n) 1 0 0 1 0 0 1
All 1s (N) 1 1 1 1 1 1 1
N-n 0 1 1 0 1 1 0

C++




// CPP program to find smallest integer X
// such that sum of its XOR with range is
// maximum.
#include <bits/stdc++.h>
using namespace std;
 
// MAX is (1 << 31) -1 or in other terms 2^31 - 1
#define MAX 2147483647
int prefixSum[100001];
 
// Function to make prefix Sum array which
void make_prefix(int A[], int n)
{
    prefixSum[0] = A[0];
    for (int i = 1; i < n; i++)
        prefixSum[i] = prefixSum[i - 1] + A[i];
}
 
// Function to find X
int Solve(int A[], int L, int R)
{
   
   
    int n = prefixSum[R] - prefixSum[L] + A[L];
    return MAX - n;
}
 
// Driver program
int main()
{
    // Taking inputs
    int n = 5, q = 3;
    int A[] = { 210, 11, 48, 22, 133 };
    int L[] = { 1, 4, 2 }, R[] = { 3, 4, 4 };
 
    make_prefix(A, n);
 
    for (int j = 0; j < q; j++)
        cout << Solve(A, L[j], R[j]) << endl;
 
    return 0;
}
 
 

Java




// Java program to find smallest integer X
// such that sum of its XOR with range is
// maximum.
import java.util.*;
 
class GFG
{
   
  // MAX is (1 << 31) -1 or in other terms 2^31 - 1
  static int MAX = 2147483647;
  static int[] prefixSum;
 
  // Function to make prefix Sum array which
  static void make_prefix(int A[], int n)
  {
    prefixSum[0] = A[0];
    for (int i = 1; i < n; i++)
      prefixSum[i] = prefixSum[i - 1] + A[i];
  }
 
  // Function to find X
  static int Solve(int A[], int L, int R)
  {
 
    int n = prefixSum[R] - prefixSum[L] + A[L];
    return MAX - n;
  }
 
  // Driver program
  public static void main(String[] args)
  {
    prefixSum = new int[100001];
     
    // Taking inputs
    int n = 5, q = 3;
    int A[] = { 210, 11, 48, 22, 133 };
    int L[] = { 1, 4, 2 }, R[] = { 3, 4, 4 };
 
    make_prefix(A, n);
 
    for (int j = 0; j < q; j++)
      System.out.println(Solve(A, L[j], R[j]));
  }
}
 
// This code is contributed by karandeep1234
 
 

Python




# CPP program to find smallest integer X
# such that sum of its XOR with range is
# maximum.
 
MAX = 2147483647
prefixSum = [0] * 100001
 
# Function to make prefix Sum array which
def make_prefix(A, n):
    global prefixSum
    prefixSum[0] = A[0]
    for i in range(1, n):
        prefixSum[i] = prefixSum[i - 1] + A[i]
 
# Function to find X
def Solve(A, L, R):
    global MAX, prefixSum
    n = prefixSum[R] - prefixSum[L] + A[L]
    return MAX - n
 
# Driver program
if __name__ == "__main__":
    # Taking inputs
    n, q = 5, 3
    A = [210, 11, 48, 22, 133]
    L = [1, 4, 2]
    R = [3, 4, 4]
 
    make_prefix(A, n)
 
    for j in range(q):
        print(Solve(A, L[j], R[j]))
 
# This code is contributed by bhardwajji
 
 

C#




// C# program to find smallest integer X
// such that sum of its XOR with range is
// maximum.
using System;
 
class GFG {
 
  // MAX is (1 << 31) -1 or in other terms 2^31 - 1
  static int MAX = 2147483647;
  static int[] prefixSum;
 
  // Function to make prefix Sum array which
  static void make_prefix(int[] A, int n)
  {
    prefixSum[0] = A[0];
    for (int i = 1; i < n; i++)
      prefixSum[i] = prefixSum[i - 1] + A[i];
  }
 
  // Function to find X
  static int Solve(int[] A, int L, int R)
  {
 
    int n = prefixSum[R] - prefixSum[L] + A[L];
    return MAX - n;
  }
 
  // Driver program
  public static void Main(string[] args)
  {
    prefixSum = new int[100001];
 
    // Taking inputs
    int n = 5, q = 3;
    int[] A = { 210, 11, 48, 22, 133 };
    int[] L = { 1, 4, 2 }, R = { 3, 4, 4 };
 
    make_prefix(A, n);
 
    for (int j = 0; j < q; j++)
      Console.WriteLine(Solve(A, L[j], R[j]));
  }
}
 
// This code is contributed by karandeep1234
 
 

Javascript




// JAVASCRIPT program to find smallest integer X
// such that sum of its XOR with range is
// maximum.
 
let prefixSum = [];
 
// Function to make prefix Sum array which
function make_prefix(A, n)
{
     
    for(let i = 0; i < n; i++)
    {
        prefixSum.push(0);
    }
    for (let i = 1; i < n; i++)
        prefixSum[i] = prefixSum[i - 1] + A[i];
}
 
// Function to find X
function Solve(A,  L,  R)
{
    let n = prefixSum[R] - prefixSum[L] + A[L];
     
    // MAX is (1 << 31) -1 or in other terms 2^31 - 1
    let MAX = 2147483647;
    return MAX - n;
}
 
// Driver program
 
    // Taking inputs
    let n = 5, q = 3;
    let A = [ 210, 11, 48, 22, 133 ];
    let L = [ 1, 4, 2 ], R = [ 3, 4, 4 ];
 
    make_prefix(A, n);
 
    for (let j = 0; j < q; j++)
        console.log(Solve(A, L[j], R[j]));
 
// This code is contributed by garg28harsh.
 
 

Time complexity: O(n)

Auxiliary Space: O(n)
 



Next Article
Number of primes in a subarray (with updates)

G

Gautam Karakoti
Improve
Article Tags :
  • Bit Magic
  • DSA
  • array-range-queries
  • Bitwise-XOR
Practice Tags :
  • Bit Magic

Similar Reads

  • PreComputation Technique on Arrays
    Precomputation refers to the process of pre-calculating and storing the results of certain computations or data structures(array in this case) in advance, in order to speed up the execution time of a program. This can be useful in situations where the same calculations are needed multiple times, as
    15 min read
  • Queries for the product of first N factorials
    Given Q[] queries where each query consists of an integer N, the task is to find the product of first N factorials for each of the query. Since the result could be large, compute it modulo 109 + 7.Examples: Input: Q[] = {4, 5} Output: 288 34560 Query 1: 1! * 2! * 3! * 4! = 1 * 2 * 6 * 24 = 288 Query
    7 min read
  • Range sum queries without updates
    Given an array arr of integers of size n. We need to compute the sum of elements from index i to index j. The queries consisting of i and j index values will be executed multiple times. Examples: Input : arr[] = {1, 2, 3, 4, 5} i = 1, j = 3 i = 2, j = 4Output : 9 12 Input : arr[] = {1, 2, 3, 4, 5} i
    6 min read
  • Range Queries for Frequencies of array elements
    Given an array of n non-negative integers. The task is to find frequency of a particular element in the arbitrary range of array[]. The range is given as positions (not 0 based indexes) in array. There can be multiple queries of given type. Examples: Input : arr[] = {2, 8, 6, 9, 8, 6, 8, 2, 11}; lef
    13 min read
  • Count Primes in Ranges
    Given a 2d array queries[][] of size n, where each query queries[i] contain 2 elements [l, r], your task is to find the count of number of primes in inclusive range [l, r] Examples: Input: queries[][] = [ [1, 10], [5, 10], [11, 20] ]Output: 4 2 4Explanation: For query 1, number of primes in range [1
    12 min read
  • Check in binary array the number represented by a subarray is odd or even
    Given an array such that all its terms is either 0 or 1.You need to tell the number represented by a subarray a[l..r] is odd or even Examples : Input : arr = {1, 1, 0, 1} l = 1, r = 3 Output : odd number represented by arr[l...r] is 101 which 5 in decimal form which is odd Input : arr = {1, 1, 1, 1}
    4 min read
  • GCDs of given index ranges in an Array
    Given an array arr[] of size N and Q queries of type {qs, qe} where qs and qe denote the starting and ending index of the query, the task is to find the GCD of all the numbers in the range. Examples: Input: arr[] = {2, 3, 60, 90, 50};Index Ranges: {1, 3}, {2, 4}, {0, 2}Output: GCDs of given ranges a
    14 min read
  • Mean of range in array
    Given an array arr[] of n integers and q queries represented by an array queries[][], where queries[i][0] = l and queries[i][1] = r. For each query, the task is to calculate the mean of elements in the range l to r and return its floor value. Examples: Input: arr[] = [3, 7, 2, 8, 5] queries[][] = [[
    12 min read
  • Difference Array | Range update query in O(1)
    You are given an integer array arr[] and a list of queries. Each query is represented as a list of integers where: [1, l, r, x]: Adds x to all elements from arr[l] to arr[r] (inclusive).[2]: Prints the current state of the array.You need to perform the queries in order. Examples : Input: arr[] = [10
    11 min read
  • Range sum query using Sparse Table
    We have an array arr[]. We need to find the sum of all the elements in the range L and R where 0 <= L <= R <= n-1. Consider a situation when there are many range queries. Examples: Input : 3 7 2 5 8 9 query(0, 5) query(3, 5) query(2, 4) Output : 34 22 15Note : array is 0 based indexed and q
    8 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