At Least k Occurrences (original) (raw)

Last Updated : 9 May, 2026

Given an array arr[] and an integer k, return the first element that appears at least **k **times; if none exists, return -1.

**Examples:

**Input: arr[] = [1, 7, 4, 3, 4, 8, 7], k = 2
**Output: 4
**Explanation: Both 7 and 4 occur 2 times. But 4 is first that occurs twice. At the index = 4, is the first element.

**Input: arr[] = [3, 1, 3, 4, 5, 1, 3, 3, 5, 4], k = 3
**Output: 3
**Explanation: Here, 3 is the only number that appeared atleast 3 times in the array.

**Input: arr[] = [10, 8, 2], k = 10
**Output: -1
**Explanation: Here no element is returning atleast 10 number of times, so -1.

Try It Yourselfredirect icon

Table of Content

[Naive Approach] Using Nested Loops – O(n²) Time and O(1) Space

To find the first element that occurs k times, iterate through the array from i = 0 to n-1 and count how many times arr[i] has appeared in the range [0, i] using another loop. As soon as the count of any element becomes equal to k, return that element immediately since it is the first to reach k occurrences. If no element reaches k occurrences, return -1.

C++ `

#include #include using namespace std;

int firstElementKTime(vector arr, int k) { int n = arr.size();

for (int i = 0; i < n; i++) {
    int cnt = 0;

    for (int j = 0; j <= i; j++) {
        if (arr[j] == arr[i])
            cnt++;
    }

    // If frequency becomes k at this point
    if (cnt == k)
        return arr[i];
}

return -1;

}

// Driver code int main() { vector arr = {1, 7, 4, 3, 4, 8, 7}; int k = 2;

cout << firstElementKTime(arr, k);

return 0;

}

Java

import java.util.HashMap;

class GFG { public static int firstElementKTime(int[] arr, int k) { HashMap<Integer, Integer> map = new HashMap<>();

    for (int num : arr) {
        map.put(num, map.getOrDefault(num, 0) + 1);

        if (map.get(num) == k) {
            return num;
        }
    }

    return -1;
}

public static void main(String[] args) {
    int[] arr = {1, 7, 4, 3, 4, 8, 7};
    int k = 2;

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

}

Python

def firstElementKTime(arr, k): freq = {}

for num in arr:
    freq[num] = freq.get(num, 0) + 1

    if freq[num] == k:
        return num

return -1

Driver code

arr = [1, 7, 4, 3, 4, 8, 7] k = 2 print(firstElementKTime(arr, k))

C#

using System; using System.Collections.Generic;

class GFG { public static int firstElementKTime(int[] arr, int k) { Dictionary<int, int> map = new Dictionary<int, int>();

    foreach (int num in arr) {
        if (map.ContainsKey(num))
            map[num]++;
        else
            map[num] = 1;

        if (map[num] == k)
            return num;
    }

    return -1;
}

static void Main() {
    int[] arr = {1, 7, 4, 3, 4, 8, 7};
    int k = 2;

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

}

JavaScript

function firstElementKTime(arr, k) { let freq = new Map();

for (let num of arr) {
    freq.set(num, (freq.get(num) || 0) + 1);

    if (freq.get(num) === k) {
        return num;
    }
}

return -1;

}

// Driver code let arr = [1, 7, 4, 3, 4, 8, 7]; let k = 2;

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

`

**[Expected Approach] Using Hash Map – O(n) Time and O(n) Space

Traverse the array from i = 0 to n-1 while maintaining a hash map to store the frequency of elements. As soon as its frequency of an element becomes equal to k, return that element immediately since it is the first to reach k occurrences. If no element reaches k occurrences, return -1.

C++ `

#include #include #include using namespace std;

int firstElementKTime(vector& arr, int k) { int n = arr.size(); unordered_map<int, int> mp;

    for (int i = 0; i < n; i++) {
        mp[arr[i]]++;

        // if the frequency becomes equal to k, we return the element.
        if (mp[arr[i]] == k)
            return arr[i];
    }

    // if no element occurs k times, we return -1.
    return -1;
}

// Driver code int main() { vector arr = {1, 7, 4, 3, 4, 8, 7}; int k = 2;

cout << firstElementKTime(arr, k);

return 0;

}

Java

import java.util.HashMap;

class GFG { public static int firstElementKTime(int[] arr, int k) { int n = arr.length; HashMap<Integer, Integer> mp = new HashMap<>();

    for (int i = 0; i < n; i++) {
        mp.put(arr[i], mp.getOrDefault(arr[i], 0) + 1);

        // if the frequency becomes equal to k, we return the element.
        if (mp.get(arr[i]) == k)
            return arr[i];
    }

    // if no element occurs k times, we return -1.
    return -1;
}

// Driver code
public static void main(String[] args) {
    int[] arr = {1, 7, 4, 3, 4, 8, 7};
    int k = 2;

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

}

Python

def firstElementKTime(arr, k): n = len(arr) mp = {}

for i in range(n):
    mp[arr[i]] = mp.get(arr[i], 0) + 1

    # if the frequency becomes equal to k, we return the element.
    if mp[arr[i]] == k:
        return arr[i]

# if no element occurs k times, we return -1.
return -1

Driver code

arr = [1, 7, 4, 3, 4, 8, 7] k = 2 print(firstElementKTime(arr, k))

C#

using System; using System.Collections.Generic;

class GFG { public static int firstElementKTime(int[] arr, int k) { int n = arr.Length; Dictionary<int, int> mp = new Dictionary<int, int>();

    for (int i = 0; i < n; i++) {
        if (mp.ContainsKey(arr[i]))
            mp[arr[i]]++;
        else
            mp[arr[i]] = 1;

        // if the frequency becomes equal to k, we return the element.
        if (mp[arr[i]] == k)
            return arr[i];
    }

    // if no element occurs k times, we return -1.
    return -1;
}

// Driver code
static void Main() {
    int[] arr = {1, 7, 4, 3, 4, 8, 7};
    int k = 2;

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

}

JavaScript

function firstElementKTime(arr, k) { let n = arr.length; let mp = new Map();

for (let i = 0; i < n; i++) {
    mp.set(arr[i], (mp.get(arr[i]) || 0) + 1);

    // if the frequency becomes equal to k, we return the element.
    if (mp.get(arr[i]) === k)
        return arr[i];
}

// if no element occurs k times, we return -1.
return -1;

}

// Driver code let arr = [1, 7, 4, 3, 4, 8, 7]; let k = 2;

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

`

**Similar Problems: