Skip to content

Commit c1aaff3

Browse files
authored
Merge pull request neetcode-gh#2439 from tayyabferozi/main
2 parents 86e72f5 + 88ea0f2 commit c1aaff3

File tree

2 files changed

+69
-1
lines changed

2 files changed

+69
-1
lines changed

javascript/0347-top-k-frequent-elements.js

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* Set - Frequency Counter
2+
* Set - Frequency Counter | Using sort
33
* Time O(NlogN) | Space O(N)
44
* https://leetcode.com/problems/top-k-frequent-elements/
55
* @param {number[]} nums
@@ -22,3 +22,44 @@ var topKFrequent = function(nums, k) {
2222
}
2323
return output;
2424
};
25+
26+
/**
27+
* Without Sort
28+
* Time O(N) | Space O(k)
29+
* https://leetcode.com/problems/top-k-frequent-elements/
30+
* @param {number[]} nums
31+
* @param {number} k
32+
* @return {number[]}
33+
*/
34+
35+
var topKFrequent = function(nums, k) {
36+
const mp = new Map();
37+
const arr = new Array(nums.length + 1).fill(0);
38+
const ans = [];
39+
40+
nums.forEach(el => {
41+
const val = mp.get(el) || 0;
42+
mp.set(el, val + 1);
43+
});
44+
45+
for ( let [key, value] of mp ) {
46+
const prev = arr[value] || [];
47+
prev.push(key);
48+
arr[value] = prev;
49+
}
50+
51+
52+
arr.reverse();
53+
for (let el of arr) {
54+
if (k < 1) break;
55+
if (el) {
56+
for (let el2 of el) {
57+
if (k < 1) break;
58+
ans.push(el2);
59+
k--;
60+
}
61+
}
62+
}
63+
64+
return ans;
65+
};

javascript/0424-longest-repeating-character-replacement.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,30 @@
1+
/**
2+
* https://leetcode.com/problems/longest-repeating-character-replacement/
3+
* Time O(((N + 26) * N) * (M - N)) | Space O(1)
4+
* @param {string} s
5+
* @param {number} k
6+
* @return {number}
7+
*/
8+
var characterReplacement = function(s, k) {
9+
let res = 0;
10+
let count = new Map();
11+
let l = 0;
12+
13+
for (let r = 0; r < s.length; r++) {
14+
let len = r - l + 1
15+
count.set(s[r], 1 + (count.get(s[r]) || 0))
16+
17+
if ((len - Math.max(...count.values())) > k) {
18+
count.set(s[l], count.get(s[l]) - 1)
19+
l++;
20+
}
21+
len = r - l + 1;
22+
res = Math.max(res, len)
23+
}
24+
25+
return res;
26+
};
27+
128
/**
229
* https://leetcode.com/problems/longest-repeating-character-replacement/
330
* Time O(((N + 26) * N) * (M - N)) | Space O(1)

0 commit comments

Comments
 (0)