返回介绍

solution / 1000-1099 / 1054.Distant Barcodes / README_EN

发布于 2024-06-17 01:03:31 字数 3958 浏览 0 评论 0 收藏 0

1054. Distant Barcodes

中文文档

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.

 

Example 1:

Input: barcodes = [1,1,1,2,2,2]
Output: [2,1,2,1,2,1]

Example 2:

Input: barcodes = [1,1,1,1,2,2,3,3]
Output: [1,3,1,3,1,2,1,2]

 

Constraints:

  • 1 <= barcodes.length <= 10000
  • 1 <= barcodes[i] <= 10000

Solutions

Solution 1

class Solution:
  def rearrangeBarcodes(self, barcodes: List[int]) -> List[int]:
    cnt = Counter(barcodes)
    barcodes.sort(key=lambda x: (-cnt[x], x))
    n = len(barcodes)
    ans = [0] * len(barcodes)
    ans[::2] = barcodes[: (n + 1) // 2]
    ans[1::2] = barcodes[(n + 1) // 2 :]
    return ans
class Solution {
  public int[] rearrangeBarcodes(int[] barcodes) {
    int n = barcodes.length;
    Integer[] t = new Integer[n];
    int mx = 0;
    for (int i = 0; i < n; ++i) {
      t[i] = barcodes[i];
      mx = Math.max(mx, barcodes[i]);
    }
    int[] cnt = new int[mx + 1];
    for (int x : barcodes) {
      ++cnt[x];
    }
    Arrays.sort(t, (a, b) -> cnt[a] == cnt[b] ? a - b : cnt[b] - cnt[a]);
    int[] ans = new int[n];
    for (int k = 0, j = 0; k < 2; ++k) {
      for (int i = k; i < n; i += 2) {
        ans[i] = t[j++];
      }
    }
    return ans;
  }
}
class Solution {
public:
  vector<int> rearrangeBarcodes(vector<int>& barcodes) {
    int mx = *max_element(barcodes.begin(), barcodes.end());
    int cnt[mx + 1];
    memset(cnt, 0, sizeof(cnt));
    for (int x : barcodes) {
      ++cnt[x];
    }
    sort(barcodes.begin(), barcodes.end(), [&](int a, int b) {
      return cnt[a] > cnt[b] || (cnt[a] == cnt[b] && a < b);
    });
    int n = barcodes.size();
    vector<int> ans(n);
    for (int k = 0, j = 0; k < 2; ++k) {
      for (int i = k; i < n; i += 2) {
        ans[i] = barcodes[j++];
      }
    }
    return ans;
  }
};
func rearrangeBarcodes(barcodes []int) []int {
  mx := slices.Max(barcodes)
  cnt := make([]int, mx+1)
  for _, x := range barcodes {
    cnt[x]++
  }
  sort.Slice(barcodes, func(i, j int) bool {
    a, b := barcodes[i], barcodes[j]
    if cnt[a] == cnt[b] {
      return a < b
    }
    return cnt[a] > cnt[b]
  })
  n := len(barcodes)
  ans := make([]int, n)
  for k, j := 0, 0; k < 2; k++ {
    for i := k; i < n; i, j = i+2, j+1 {
      ans[i] = barcodes[j]
    }
  }
  return ans
}
function rearrangeBarcodes(barcodes: number[]): number[] {
  const mx = Math.max(...barcodes);
  const cnt = Array(mx + 1).fill(0);
  for (const x of barcodes) {
    ++cnt[x];
  }
  barcodes.sort((a, b) => (cnt[a] === cnt[b] ? a - b : cnt[b] - cnt[a]));
  const n = barcodes.length;
  const ans = Array(n);
  for (let k = 0, j = 0; k < 2; ++k) {
    for (let i = k; i < n; i += 2, ++j) {
      ans[i] = barcodes[j];
    }
  }
  return ans;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文