Back to all solutions

#1054 - Distant Barcodes

Problem Description

In a warehouse, there is a row of barcodes, where the ith barcode is barcodes[i].

Rearrange the barcodes so that no two adjacent barcodes are equal. You may return any answer, and it is guaranteed an answer exists.

Solution

/**
 * @param {number[]} barcodes
 * @return {number[]}
 */
var rearrangeBarcodes = function(barcodes) {
  const frequencyMap = new Map();
  for (const code of barcodes) {
    frequencyMap.set(code, (frequencyMap.get(code) || 0) + 1);
  }

  const sortedCodes = [...frequencyMap.entries()]
    .sort((a, b) => b[1] - a[1]);

  const result = new Array(barcodes.length);
  let index = 0;

  for (const [code, count] of sortedCodes) {
    for (let i = 0; i < count; i++) {
      if (index >= barcodes.length) index = 1;
      result[index] = code;
      index += 2;
    }
  }

  return result;
};