Skip to content

Commit 65fe22e

Browse files
committed
Added Top K Frequent Elements
- Added Top K Frequent Elements and corresponding tests.
1 parent 18cf392 commit 65fe22e

File tree

3 files changed

+65
-0
lines changed

3 files changed

+65
-0
lines changed
+54
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/*
2+
Top K Frequent Elements
3+
https://leetcode.com/problems/top-k-frequent-elements/description/
4+
5+
Given an integer array nums and an integer k, return the k most frequent elements.
6+
You may return the answer in any order.
7+
8+
9+
Example 1:
10+
11+
Input: nums = [1,1,1,2,2,3], k = 2
12+
Output: [1,2]
13+
14+
15+
Example 2:
16+
17+
Input: nums = [1], k = 1
18+
Output: [1]
19+
20+
21+
Constraints:
22+
23+
1) 1 <= nums.length <= 10^5
24+
2) -10^4 <= nums[i] <= 10^4
25+
3) k is in the range [1, the number of unique elements in the array].
26+
4) It is guaranteed that the answer is unique.
27+
*/
28+
29+
/**
30+
* @param {number[]} nums
31+
* @param {number} k
32+
* @return {number[]}
33+
*/
34+
var topKFrequent = function(nums, k) {
35+
const freqMap = new Map();
36+
const bucket = [];
37+
const result = [];
38+
39+
for(let num of nums) {
40+
freqMap.set(num, (freqMap.get(num) || 0) + 1);
41+
}
42+
43+
for(let [num, freq] of freqMap) {
44+
bucket[freq] = (bucket[freq] || new Set()).add(num);
45+
}
46+
47+
for(let i = bucket.length-1; i >= 0; i--) {
48+
if(bucket[i]) result.push(...bucket[i]);
49+
if(result.length === k) break;
50+
}
51+
return result;
52+
};
53+
54+
module.exports.topKFrequent = topKFrequent;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
const assert = require('assert');
2+
const topKFrequent = require('../../LeetcodeProblems/Algorithms/Top_K_Frequent_Elements').topKFrequent;
3+
4+
var test = function () {
5+
assert.deepEqual(topKFrequent([1,1,1,2,2,3], 2).sort(), [1,2]);
6+
assert.deepEqual(topKFrequent([7,8,9,8,9,8], 2).sort(), [8,9]);
7+
assert.deepEqual(topKFrequent([1,1,1,1], 1).sort(), [1]);
8+
}
9+
10+
module.exports.test = test;

Diff for: README.md

+1
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ To run a specific problem in your console run `node <problem_file_path>` (e.g.
6767
| [Find Subarrays With Equal Sum ](/LeetcodeProblems/Algorithms/Find_Subarrays_With_Equal_Sums.js) | Medium | https://leetcode.com/problems/find-subarrays-with-equal-sum/ |
6868
| [Reverse Integer](/LeetcodeProblems/Algorithms/Reverse_Integer.js) | Medium | https://leetcode.com/problems/reverse-integer/ |
6969
| [Minimize Maximum Pair Sum in Array ](/LeetcodeProblems/Algorithms/Minimize_Maximum_Pair_Sum_In_Array.js) | Medium | https://leetcode.com/problems/minimize-maximum-pair-sum-in-array/ |
70+
| [Top K Frequent Elements ](/LeetcodeProblems/Algorithms/Top_K_Frequent_Elements.js) | Medium | https://leetcode.com/problems/top-k-frequent-elements/ |
7071
| [Flood Fill ](/LeetcodeProblems/Algorithms/Flood_Fill.js) | Easy | https://leetcode.com/problems/flood-fill/ |
7172
| [Implement stack using queues ](/LeetcodeProblems/Algorithms/Implement_stack_using_queues.js) | Easy | https://leetcode.com/problems/implement-stack-using-queues/ |
7273
| [Number of Segments in a String ](/LeetcodeProblems/Algorithms/Number_of_Segments_in_a_String.js) | Easy | https://leetcode.com/problems/number-of-segments-in-a-string/ |

0 commit comments

Comments
 (0)