Julia
function deleteNth(arr::Vector, n::Int64)
# 第一种解法:filter()
# d = Dict{Any,Int64}()
# function select(key)
# value = get(d, key, 0)
# d[key] = value + 1
# return value < n
# end
# return filter(select, arr)
# 第二种解法:循环,相当于 foreach()
d = Dict{Any,Int64}()
output = []
for key ∈ arr
value = get(d, key, 0)
if value < n
push!(output, key)
d[key] = value + 1
end
end
return output
end
#> deleteNth (generic function with 1 method)
using Test
@test deleteNth([20, 37, 20, 21], 1) == [20, 37, 21]
#> Test Passed
#> Expression: deleteNth([20, 37, 20, 21], 1) == [20, 37, 21]
#> Evaluated: Any[20, 37, 21] == [20, 37, 21]
@test deleteNth([1, 1, 3, 3, 7, 2, 2, 2, 2], 3) == [1, 1, 3, 3, 7, 2, 2, 2]
#> Test Passed
#> Expression: deleteNth([1, 1, 3, 3, 7, 2, 2, 2, 2], 3) == [1, 1, 3, 3, 7, 2, 2, 2]
#> Evaluated: Any[1, 1, 3, 3, 7, 2, 2, 2] == [1, 1, 3, 3, 7, 2, 2, 2]
JavaScript
/**
* 去掉已出现次数大于n的字符
* @param {Array} arr
* @param {Integer} n
* @returns
*/
const deleteNth = (arr, n) => {
let map = new Map();
return arr.filter(key => {
let value = map.get(key) || 0; // ||左边的表达式转换成Bool为false,返回||右边的表达式
map.set(key, value + 1);
return map.get(key) <= n;
});
};
console.log(deleteNth([1, 1, 3, 3, 7, 2, 2, 2, 2], 2)); // [1, 1, 3, 3, 7, 2, 2]
#> [
#> 1, 1, 3, 3,
#> 7, 2, 2
#> ]