Max Repeating in a Limited Range Array (original) (raw)

Last Updated : 3 May, 2026

Given an array **arr[]. The array contains numbers ranging from **0 to k-1 where k is a positive integer__._ Find the maximum repeating number in this array. If there are two or more maximum repeating numbers, return the element with the least value.

I**nput: k = 3, arr[] = [2, 2, 1, 2]
**Output: 2
**Explanation: 2 is the most frequent element.

**Input: k = 3, arr[] = [2, 2, 1, 0, 0, 1]
**Output: 0
**Explanation: 0, 1, and 2 all have the same frequency of 2. But since 0 is the smallest, you need to return 0.

Try It Yourselfredirect icon

Table of Content

[Naive Approach] Two Nested Loops- O(n²) Time and O(1) Space

We check the frequency of each element by comparing it with every other element. The element with the highest frequency is selected, and in case of a tie, the smaller element is chosen.

C++ `

#include #include using namespace std;

// Function to find maximum repeating element (naive) int maxRepeating(int k, vector& arr) {

int n = arr.size();
int maxCount = 0;
int result = arr[0];

// Pick each element
for (int i = 0; i < n; i++) {
    int count = 0;

    // Count frequency of arr[i]
    for (int j = 0; j < n; j++) {
        if (arr[j] == arr[i])
            count++;
    }

    // Update result
    if (count > maxCount) {
        maxCount = count;
        result = arr[i];
    }
    else if (count == maxCount && arr[i] < result) {
        result = arr[i];
    }
}

return result;

}

// Driver code int main() { int k = 6; vector arr = {2, 3, 3, 5, 3, 2};

cout << maxRepeating(k, arr);

return 0;

}

Java

import java.util.*;

class GFG {

// Function to find maximum repeating element (naive)
static int maxRepeating(int k, int[] arr) {
    
    int n = arr.length;
    int maxCount = 0;
    int result = arr[0];

    // Pick each element
    for (int i = 0; i < n; i++) {
        int count = 0;

        // Count frequency of arr[i]
        for (int j = 0; j < n; j++) {
            if (arr[j] == arr[i])
                count++;
        }

        // Update result
        if (count > maxCount) {
            maxCount = count;
            result = arr[i];
        }
        else if (count == maxCount && arr[i] < result) {
            result = arr[i];
        }
    }

    return result;
}

public static void main(String[] args) {
    int k = 6;
    int[] arr = {2, 3, 3, 5, 3, 2};

    System.out.println(maxRepeating(k, arr));
}

}

Python

Function to find maximum repeating element (naive)

def maxRepeating(k, arr):

n = len(arr)
maxCount = 0
result = arr[0]

# Pick each element
for i in range(n):
    count = 0

    # Count frequency of arr[i]
    for j in range(n):
        if arr[j] == arr[i]:
            count += 1

    # Update result
    if count > maxCount:
        maxCount = count
        result = arr[i]
    elif count == maxCount and arr[i] < result:
        result = arr[i]

return result

Driver code

k = 6 arr = [2, 3, 3, 5, 3, 2]

print(maxRepeating(k, arr))

C#

using System;

class GFG {

// Function to find maximum repeating element (naive)
static int maxRepeating(int k, int[] arr) {
    
    int n = arr.Length;
    int maxCount = 0;
    int result = arr[0];

    // Pick each element
    for (int i = 0; i < n; i++) {
        int count = 0;

        // Count frequency of arr[i]
        for (int j = 0; j < n; j++) {
            if (arr[j] == arr[i])
                count++;
        }

        // Update result
        if (count > maxCount) {
            maxCount = count;
            result = arr[i];
        }
        else if (count == maxCount && arr[i] < result) {
            result = arr[i];
        }
    }

    return result;
}

public static void Main() {
    int k = 6;
    int[] arr = {2, 3, 3, 5, 3, 2};

    Console.WriteLine(maxRepeating(k, arr));
}

}

JavaScript

// Function to find maximum repeating element (naive) function maxRepeating(k, arr) {

let n = arr.length;
let maxCount = 0;
let result = arr[0];

// Pick each element
for (let i = 0; i < n; i++) {
    let count = 0;

    // Count frequency of arr[i]
    for (let j = 0; j < n; j++) {
        if (arr[j] === arr[i])
            count++;
    }

    // Update result
    if (count > maxCount) {
        maxCount = count;
        result = arr[i];
    }
    else if (count === maxCount && arr[i] < result) {
        result = arr[i];
    }
}

return result;

}

// Driver code let k = 6; let arr = [2, 3, 3, 5, 3, 2];

console.log(maxRepeating(k, arr));

`

[Better Approach] Using Frequency Array - O(n + k) Time and O(k) Space

Since elements lie in range 0 to k-1, we can directly use a frequency array of size k to count occurrences. Then we scan this array to find the element with maximum frequency, choosing the smallest element in case of a tie.

#include #include using namespace std;

int maxRepeating(int k, vector& arr) { // Frequency array of size k vector freq(k, 0);

// Count frequency of each element
for (int i = 0; i < arr.size(); i++)
    freq[arr[i]]++;

int maxFreq = 0;
int result = 0;

// Find element with maximum frequency
// If tie choose smallest element
for (int i = 0; i < k; i++)
{
    if (freq[i] > maxFreq)
    {
        maxFreq = freq[i];
        result = i;
    }
    else if (freq[i] == maxFreq && i < result)
    {
        result = i;
    }
}

return result;

}

// Driver code int main() { int k = 71;

vector<int> arr = {
    35, 4, 52, 55, 28, 68, 39, 67, 38, 29,
    26, 11, 69, 10, 16, 56, 10, 61, 70, 27,
    65, 53
};

cout << maxRepeating(k, arr);

return 0;

}

Java

import java.util.*;

class GFG {

static int maxRepeating(int k, int[] arr)
{
    // Frequency array of size k
    int[] freq = new int[k];

    // Count frequency of each element
    for (int i = 0; i < arr.length; i++)
        freq[arr[i]]++;

    int maxFreq = 0;
    int result = 0;

    // Find element with maximum frequency
    // If tie choose smallest element
    for (int i = 0; i < k; i++)
    {
        if (freq[i] > maxFreq)
        {
            maxFreq = freq[i];
            result = i;
        }
        else if (freq[i] == maxFreq && i < result)
        {
            result = i;
        }
    }

    return result;
}

public static void main(String[] args)
{
    int k = 71;

    int[] arr = {
        35, 4, 52, 55, 28, 68, 39, 67, 38, 29,
        26, 11, 69, 10, 16, 56, 10, 61, 70, 27,
        65, 53
    };

    System.out.println(maxRepeating(k, arr));
}

}

Python

Function to find maximum repeating element

def maxRepeating(k, arr):

# Frequency array of size k
freq = [0] * k

# Count frequency of each element
for i in range(len(arr)):
    freq[arr[i]] += 1

maxFreq = 0
result = 0

# Find element with maximum frequency
# If tie choose smallest element
for i in range(k):
    if freq[i] > maxFreq:
        maxFreq = freq[i]
        result = i
    elif freq[i] == maxFreq and i < result:
        result = i

return result

Driver code

k = 71 arr = [ 35, 4, 52, 55, 28, 68, 39, 67, 38, 29, 26, 11, 69, 10, 16, 56, 10, 61, 70, 27, 65, 53 ]

print(maxRepeating(k, arr))

C#

using System;

class GFG {

static int maxRepeating(int k, int[] arr)
{
    // Frequency array of size k
    int[] freq = new int[k];

    // Count frequency of each element
    for (int i = 0; i < arr.Length; i++)
        freq[arr[i]]++;

    int maxFreq = 0;
    int result = 0;

    // Find element with maximum frequency
    // If tie choose smallest element
    for (int i = 0; i < k; i++)
    {
        if (freq[i] > maxFreq)
        {
            maxFreq = freq[i];
            result = i;
        }
        else if (freq[i] == maxFreq && i < result)
        {
            result = i;
        }
    }

    return result;
}

public static void Main()
{
    int k = 71;

    int[] arr = {
        35, 4, 52, 55, 28, 68, 39, 67, 38, 29,
        26, 11, 69, 10, 16, 56, 10, 61, 70, 27,
        65, 53
    };

    Console.WriteLine(maxRepeating(k, arr));
}

}

JavaScript

// Function to find maximum repeating element function maxRepeating(k, arr) { // Frequency array of size k let freq = new Array(k).fill(0);

// Count frequency of each element
for (let i = 0; i < arr.length; i++)
    freq[arr[i]]++;

let maxFreq = 0;
let result = 0;

// Find element with maximum frequency
// If tie choose smallest element
for (let i = 0; i < k; i++)
{
    if (freq[i] > maxFreq)
    {
        maxFreq = freq[i];
        result = i;
    }
    else if (freq[i] === maxFreq && i < result)
    {
        result = i;
    }
}

return result;

}

// Driver code let k = 71;

let arr = [ 35, 4, 52, 55, 28, 68, 39, 67, 38, 29, 26, 11, 69, 10, 16, 56, 10, 61, 70, 27, 65, 53 ];

console.log(maxRepeating(k, arr));

`

**Exercise: The above solution prints only one repeating element and doesn't work if we want to print all maximum repeating elements. For example, if the input array is {2, 3, 2, 3}, the above solution will print only 3. What if we need to print both of 2 and 3 as both of them occur maximum number of times. Write a O(n) time and O(1) extra space function that prints all maximum repeating elements. (Hint: We can use maximum quotient arr[i]/n instead of maximum value in step 2).
Note that the above solutions may cause overflow if adding k repeatedly makes the value more than INT_MAX.