Как узнать можно ли разделить массив на массивы последовательно повторяющихся чисел JavaScript
Мне помогли разобраться c тем как узнать количество каждого из значений в массиве, но я так и не могу понять как сделать так что бы узнать смогу ли я разделить массив на суб-масивы по количеству повторяющихся элементов.
Массив приходит:
[1, 2, 3, 3, 4, 4, 5, 6]
и если условие равно 4, то я это массив могу разделить, так как мне хватает повторяющихся чисел:
[ [1, 2, 3, 4], [3, 4, 5, 6] ]
если условие равно 2 то так же могу, а если 3 то уже нет.
Как это можно проверить?
Ответы (1 шт):
Автор решения: Vasily
→ Ссылка
const array = [1, 2, 3, 3, 4, 4, 5, 6]
const checkArray = (numbers, n) => {
if (!numbers.length % n) {
return false
}
const map = new Map()
for (const number of numbers) {
map.set(number, map.has(number) ? map.get(number) + 1 : 1)
}
for (let number of numbers) {
if (map.get(number) === 0) {
continue
}
while (map.get(--number) > 0);
++number
const count = map.get(number)
for (let index = 1; index < n; ++index) {
const current = map.get(number + index)
if (current === undefined || current < count) {
return false
}
map.set(number + index, current - count)
}
map.set(number, 0)
}
return true
}
console.log(checkArray(array, 4)) // true
console.log(checkArray(array, 2)) // true
console.log(checkArray(array, 3)) // false