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
Last updated
Was this helpful?