1054. 距离相等的条形码

https://leetcode-cn.com/problems/distant-barcodes/

题目描述

方法1:直接排序

思路

  • 统计条形码的出现次数,按出现次数排序

  • 取出现次数最多的条形码,填充偶数位(0, 2, 4...)

  • 重复上一步骤直到偶数位填充完毕,然后开始填充奇数位(1, 3, 5...)

复杂度分析

  • 时间复杂度:$O(NlogN)$,N 是 barcodes 的长度,统计条形码出现次数的时间是 $O(N)$,排序时间是 $O(klogk)$,k 是条形码总数,k 最坏情况下是 N。

  • 空间复杂度:$O(N)$,哈希表的空间,最坏的情况是每个条形码都不一样。

代码

JavaScript Code

方法2:堆排序

思路

  • 统计条形码的出现次数,建堆

  • 从堆中取出现次数最多的条形码,填充偶数位(0, 2, 4...)

  • 重复上一步骤直到偶数位填充完毕,然后开始填充奇数位(1, 3, 5...)

复杂度分析

  • 时间复杂度:$O(NlogN)$,N 是 barcodes 的长度,统计条形码出现次数的时间是 $O(N)$,每个条形码入堆出堆一次,时间是 $O(NlogN)$。

  • 空间复杂度:$O(N)$,哈希表的空间。

代码

JavaScript Code

方法3

思路

  • 统计条形码的出现次数,建堆

  • 每次从堆中取两个出现次数最多的条形码,将它们加入排列结果中,然后数量分别减一后重新入堆

  • 直到堆中元素少于两个

复杂度分析

  • 时间复杂度:$O(NlogN)$,N 是 barcodes 的长度,统计条形码出现次数的时间是 $O(N)$,每个条形码入堆出堆一次,时间是 $O(NlogN)$。

  • 空间复杂度:$O(N)$,哈希表的空间,最坏的情况是每个条形码都不一样。

代码

JavaScript Code

更多题解可以访问:https://github.com/suukii/91-days-algorithm

Last updated

Was this helpful?