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 these gallery sessions, since the setting usually repeats. He isn't fond of seeing the Eiffel tower 40 times in a row. He tells them that he will only sit during the session if they only show the same setting at most N times. Luckily, Alice and Bob are able to encode each setting 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?
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]
.
Examples
delete_nth([1,1,1,1],2)
# return [1,1]
delete_nth([20,37,20,21],1)
# return [20,37,21]
Tests
delete_nth([1,1,3,3,7,2,2,2,2])
, N= 3
delete_nth([20,37,20,21])
, N = 1
Good luck!
This challenge comes from JustyFY on CodeWars. Thank you to CodeWars, who has licensed redistribution of this challenge under the 2-Clause BSD License!
Want to propose a challenge idea for a future post? Email yo+challenge@dev.to with your suggestions!
Top comments (6)
Here is C++ solution,
What if given numbers are not positive ?
ans
vector contains each number only up toocc
times. So,occ
can never be negative. If user passed a negative number asocc
, thenans
vector will be empty.If given numbers are negative, still there should not be any problem. Example,
Javscript
With the assumption that in a long array, most elements will be seen enough times, and we need to quickly drop them:
Without that assumption:
Here is the Python solution:
Trying to figure out a version that dosn't use a list or map to remember what's been, I've created this mess in python, that is limited to a maximum count of 999: