ভিডিওতে দেখো — YouTube @algonur_com
কোড
Python
def topKFrequent(nums: list[int], k: int) -> list[int]:
from collections import Counter
count = Counter(nums)
bucket = [[] for _ in range(len(nums) + 1)]
for num, freq in count.items():
bucket[freq].append(num)
res = []
for i in range(len(bucket) - 1, 0, -1):
for num in bucket[i]:
res.append(num)
if len(res) == k: return resJava
public int[] topKFrequent(int[] nums, int k) {
Map<Integer,Integer> count = new HashMap<>();
for (int n : nums) count.merge(n, 1, Integer::sum);
List<Integer>[] bucket = new List[nums.length + 1];
for (int key : count.keySet()) {
int f = count.get(key);
if (bucket[f] == null) bucket[f] = new ArrayList<>();
bucket[f].add(key);
}
int[] res = new int[k]; int idx = 0;
for (int i = bucket.length - 1; i > 0 && idx < k; i--)
if (bucket[i] != null) for (int n : bucket[i]) if (idx < k) res[idx++] = n;
return res;
}Kotlin
fun topKFrequent(nums: IntArray, k: Int): IntArray {
val count = nums.groupBy { it }.mapValues { it.value.size }
return count.entries.sortedByDescending { it.value }.take(k).map { it.key }.toIntArray()
}C++
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int,int> cnt;
for (int n : nums) cnt[n]++;
vector<vector<int>> bucket(nums.size() + 1);
for (auto& [num, freq] : cnt) bucket[freq].push_back(num);
vector<int> res;
for (int i = bucket.size()-1; i >= 0 && res.size() < k; i--)
for (int n : bucket[i]) { res.push_back(n); if (res.size()==k) return res; }
return res;
}C
int cmpFreq(const void* a, const void* b) {
int* x = (int*)a; int* y = (int*)b;
return y[1] - x[1];
}
int* topKFrequent(int* nums, int numsSize, int k, int* returnSize) {
// count frequencies with O(n²) scan
int uniq[numsSize][2]; int uLen = 0;
for (int i = 0; i < numsSize; i++) {
int found = 0;
for (int j = 0; j < uLen; j++) if (uniq[j][0]==nums[i]) { uniq[j][1]++; found=1; break; }
if (!found) { uniq[uLen][0]=nums[i]; uniq[uLen][1]=1; uLen++; }
}
qsort(uniq, uLen, sizeof(uniq[0]), cmpFreq);
int* res = (int*)malloc(k*sizeof(int));
for (int i = 0; i < k; i++) res[i] = uniq[i][0];
*returnSize = k; return res;
}জটিলতা
O(n)
সময় — অ্যারেটা একবারই ঘুরি, ম্যাপে খোঁজা O(1)।
O(n)
জায়গা — সবচেয়ে খারাপ ক্ষেত্রে সব সংখ্যা ম্যাপে থাকে।
আগের সমস্যা← Group Anagramsপরের সমস্যাEncode and Decode Strings →