Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 71ad302

Browse files
hot9cupsignacio-chiazzo
authored andcommitted
Add Top K Frequent Elements
- Added Top K Frequent Elements and the corresponding tests. - Updated Readme to reflect the same.
1 parent 8f5e2d1 commit 71ad302

File tree

3 files changed

+65
-0
lines changed

3 files changed

+65
-0
lines changed
Lines changed: 54 additions & 0 deletions
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;
Lines changed: 10 additions & 0 deletions
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;

‎README.md‎

Lines changed: 1 addition & 0 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /