kirbi1996
@kirbi1996

Как вывести индексы всех нечетных повторяющихся элементов массива кроме последнего?

Здравствуйте, имеется массив чисел , предположим.
arr = [1, 2, 3, 3, 1, 2, 3, 4, 1, 2, 3, 4];
На выходе необходимо получить индексы всех повторяющихся нечетных чисел, кроме последних.
arr1 [0, 2, 3, 4, 6, 7]
При этом стоит задача сократить время выполнения. Делал через цикл с двойным IndexOf, но получается очень долго. Хотелось бы найти лаконичное решение данной задачи, заранее спасибо.
  • Вопрос задан
  • 918 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Karpion
Для начала надо создавать hash-массив, где индексами будут значения Вашего массива, а значением - список индексов. Тут же надо отфильтровать нужные (нечётные) значения, их в hash-массив заносить не надо.

Затем проходим по hash-массиву, выкидываем последние индексы. При этом выкидываются и неповторяющиеся элементы.

На и наконец собираем значения из hash-массива в нормальный массив, сортируем его - и это будет ответом.

Я надеюсь, понятно объяснил.
(Можно ли ещё быстрее - не знаю. Наверно, надо смотреть, зачем это извращение вообще нужно.)
Ответ написан
@nvdfxx
Senior Pomidor developer
let arr = [1, 2, 3, 3, 1, 2, 3, 4, 1, 2, 3, 4]

const f = a => {
  const b = {},
        c = []
  a.forEach((e, i) => e % 2 !== 0 ? b[e] ? b[e].push(i) : b[e] = [i] : null)
  for (let g in b) {
    b[g].length > 1 ? c.push(b[g].slice(0, -1)) : c.push(b[g])
  }
  return c.flat().sort((x, y) => x - y)
}

console.log(f(arr)) // [0, 2, 3, 4, 6]
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы