Day11-StackAndQueue02
150. Evaluate Reverse Polish Notation
Node:
Time Complexity && Space Complexity
- Time Complexity: O(n)
- Space Complexity: O(n)
1 | var evalRPN = function (tokens) { |
239. Sliding Window Maximum
Node:
- Could use priority queue or monotonic stack(decrease)
- monotonic stack: only keep the unique value which decrease, not save the equal value
- Key is the know when to remove the previous value out of k scope
Time Complexity && Space Complexity
- Monotonic Stack(decrease)
- Time Complexity: O(n^2)
- stack.shift() is n in worse case
- Space Complexity: O(n)
- Time Complexity: O(n^2)
1 | var maxSlidingWindow = function (nums, k) { |
- Priority Queue
- Time Complexity: O(nlogk)
- Space Complexity: O(n)
1 | var maxSlidingWindow = function (nums, k) { |
347. Top K Frequent Elements
Node:
- Priority Queue: O(nlogk)(enqueue is logk since size of heap is k or less than k)
Time Complexity && Space Complexity
Priority Queue
Time Complexity: O(nlogk)
Space Complexity: O(n)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23var topKFrequent = function(nums, k){
const heap = new PriorityQueue({compare: (a,b) => a[1] - b[1]});
const frequentMap = new Map();
const res = [];
for(const num of nums){
if(frequentMap.has(num)){
frequentMap.set(num, frequentMap.get(num) + 1);
}else{
frequentMap.set(num, 1);
}
}
// O(nlogk)(enqueue is logk since size of heap is k or less than k)
for(const [key, value] of frequentMap){
heap.enqueue([key, value]);
if(heap.size() > k){
heap.dequeue();
}
}
while(heap.size() > 0){
res.push(heap.dequeue()[0]);
}
return res;
}
Array sort
Time Complexity: O(nlog(n))
Space Complexity: O(n)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20var topKFrequent = function (nums, k) {
const frequentMap = new Map();
const arr = [];
const res = [];
for (const num of nums) {
if (frequentMap.has(num)) {
frequentMap.set(num, frequentMap.get(num) + 1);
} else {
frequentMap.set(num, 1);
}
}
frequentMap.forEach((value, key) => arr.push([key, value]));
// Olog(n)
arr.sort((a, b) => b[1] - a[1]);
for (let i = 0; i < k; i++) {
res.push(arr[i][0]);
}
return res;
};
- Title: Day11-StackAndQueue02
- Author: Guoyi
- Created at : 2024-09-16 22:25:31
- Updated at : 2024-12-07 03:58:41
- Link: https://guoyiwang.github.io/Algorithm/Day11-StackAndQueue02/
- License: This work is licensed under CC BY-NC-SA 4.0.
Comments