-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdeleteNth.js
More file actions
41 lines (37 loc) · 1.49 KB
/
deleteNth.js
File metadata and controls
41 lines (37 loc) · 1.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/**
* Enough is enough!
* Alice and Bob were on a holiday. Both of them took many pictures of the places they've been,
* and now they want to show Charlie their entire collection. However, Charlie doesn't like this sessions,
* since the motive usually repeats. He isn't fond of seeing the Eiffel tower 40 times. He tells them that
* he will only sit during the session if they show the same motive at most N times. Luckily, Alice and Bob
* are able to encode the motive as a number. Can you help them to remove numbers such that their list
* contains each number only up to N times, without changing the order?
* Task
* Given a list lst and a number N, create a new list that contains each number of lst at most N times
* without reordering. For example if N = 2, and the input is [1,2,3,1,2,1,2,3], you take [1,2,3,1,2],
* drop the next [1,2] since this would lead to 1 and 2 being in the result 3 times, and then take 3,
* which leads to [1,2,3,1,2,3].
* Example
* deleteNth ([1,1,1,1],2) // return [1,1]
* deleteNth ([20,37,20,21],1) // return [20,37,21]
*/
const _updateHashMap = (hashMap, val) => {
if (hashMap.has(val)) {
let value = hashMap.get(val)
hashMap.set(val, value+1)
} else {
hashMap.set(val, 1)
}
}
function deleteNth(arr,n){
// ...
const hashMap = new Map()
const newArray = []
return arr.filter(a=>{
_updateHashMap(hashMap, a)
if (hashMap.get(a) <= n) {
return a
}
})
return newArray
}