Как узнать можно ли разделить массив на массивы последовательно повторяющихся чисел 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

→ Ссылка