From 0271378905f32a34eabf2f80861760552988d74b Mon Sep 17 00:00:00 2001 From: hot9cups Date: Sat, 8 Oct 2022 21:26:06 +0530 Subject: [PATCH 1/2] Add Top K Frequent Elements - Added Top K Frequent Elements and the corresponding tests. - Updated Readme to reflect the same. --- .../Algorithms/Top_K_Frequent_Elements.js | 54 +++++++++++++++++++ .../Top_K_Frequent_Elements_Test.js | 10 ++++ README.md | 1 + 3 files changed, 65 insertions(+) create mode 100644 LeetcodeProblems/Algorithms/Top_K_Frequent_Elements.js create mode 100644 LeetcodeProblemsTests/Algorithms/Top_K_Frequent_Elements_Test.js diff --git a/LeetcodeProblems/Algorithms/Top_K_Frequent_Elements.js b/LeetcodeProblems/Algorithms/Top_K_Frequent_Elements.js new file mode 100644 index 0000000..a67a82d --- /dev/null +++ b/LeetcodeProblems/Algorithms/Top_K_Frequent_Elements.js @@ -0,0 +1,54 @@ +/* +Top K Frequent Elements +https://leetcode.com/problems/top-k-frequent-elements/description/ + +Given an integer array nums and an integer k, return the k most frequent elements. +You may return the answer in any order. + + +Example 1: + +Input: nums = [1,1,1,2,2,3], k = 2 +Output: [1,2] + + +Example 2: + +Input: nums = [1], k = 1 +Output: [1] + + +Constraints: + +1) 1 <= nums.length <= 10^5 +2) -10^4 <= nums[i] <= 10^4 +3) k is in the range [1, the number of unique elements in the array]. +4) It is guaranteed that the answer is unique. +*/ + +/** + * @param {number[]} nums + * @param {number} k + * @return {number[]} + */ + var topKFrequent = function(nums, k) { + const freqMap = new Map(); + const bucket = []; + const result = []; + + for(let num of nums) { + freqMap.set(num, (freqMap.get(num) || 0) + 1); + } + + for(let [num, freq] of freqMap) { + bucket[freq] = (bucket[freq] || new Set()).add(num); + } + + for(let i = bucket.length-1; i >= 0; i--) { + if(bucket[i]) result.push(...bucket[i]); + if(result.length === k) break; + } + return result; +}; + +module.exports.topKFrequent = topKFrequent; diff --git a/LeetcodeProblemsTests/Algorithms/Top_K_Frequent_Elements_Test.js b/LeetcodeProblemsTests/Algorithms/Top_K_Frequent_Elements_Test.js new file mode 100644 index 0000000..5900f68 --- /dev/null +++ b/LeetcodeProblemsTests/Algorithms/Top_K_Frequent_Elements_Test.js @@ -0,0 +1,10 @@ +const assert = require('assert'); +const topKFrequent = require('../../LeetcodeProblems/Algorithms/Top_K_Frequent_Elements').topKFrequent; + +var test = function () { + assert.deepEqual(topKFrequent([1,1,1,2,2,3], 2).sort(), [1,2]); + assert.deepEqual(topKFrequent([7,8,9,8,9,8], 2).sort(), [8,9]); + assert.deepEqual(topKFrequent([1,1,1,1], 1).sort(), [1]); +} + +module.exports.test = test; diff --git a/README.md b/README.md index 91d495b..6bf105e 100644 --- a/README.md +++ b/README.md @@ -67,6 +67,7 @@ To run a specific problem in your console run `node ` (e.g. | [Find Subarrays With Equal Sum ](/LeetcodeProblems/Algorithms/Find_Subarrays_With_Equal_Sums.js) | Medium | https://leetcode.com/problems/find-subarrays-with-equal-sum/ | | [Reverse Integer](/LeetcodeProblems/Algorithms/Reverse_Integer.js) | Medium | https://leetcode.com/problems/reverse-integer/ | | [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/ | +| [Top K Frequent Elements ](/LeetcodeProblems/Algorithms/Top_K_Frequent_Elements.js) | Medium | https://leetcode.com/problems/top-k-frequent-elements/ | | [Flood Fill ](/LeetcodeProblems/Algorithms/Flood_Fill.js) | Easy | https://leetcode.com/problems/flood-fill/ | | [Implement stack using queues ](/LeetcodeProblems/Algorithms/Implement_stack_using_queues.js) | Easy | https://leetcode.com/problems/implement-stack-using-queues/ | | [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/ | From 3451fb0145c562623f842d983933c2037148af89 Mon Sep 17 00:00:00 2001 From: hot9cups Date: Sun, 9 Oct 2022 06:58:02 +0530 Subject: [PATCH 2/2] Update LeetcodeProblems/Algorithms/Top_K_Frequent_Elements.js Co-authored-by: Ignacio Chiazzo Cardarello --- LeetcodeProblems/Algorithms/Top_K_Frequent_Elements.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/LeetcodeProblems/Algorithms/Top_K_Frequent_Elements.js b/LeetcodeProblems/Algorithms/Top_K_Frequent_Elements.js index a67a82d..5180f8c 100644 --- a/LeetcodeProblems/Algorithms/Top_K_Frequent_Elements.js +++ b/LeetcodeProblems/Algorithms/Top_K_Frequent_Elements.js @@ -45,8 +45,10 @@ Constraints: } for(let i = bucket.length-1; i >= 0; i--) { - if(bucket[i]) result.push(...bucket[i]); - if(result.length === k) break; + if(bucket[i]) { + result.push(...bucket[i]); + if(result.length === k) break; + } } return result; };